formatting

This commit is contained in:
staviq 2023-09-16 22:36:04 +02:00
parent 9f630c6681
commit 28cdd8c3b0
2 changed files with 154 additions and 72 deletions

View file

@ -550,7 +550,7 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) {
} else if ( log_param_single_parse( argv[i] ) ) { } else if ( log_param_single_parse( argv[i] ) ) {
// Do nothing, log_param_single_parse automatically does it's thing // Do nothing, log_param_single_parse automatically does it's thing
// and returns if a match was found and parsed. // and returns if a match was found and parsed.
} else if ( log_param_pair_parse( /*check_but_dont_parse*/ true, argv[i] ) ) { } else if ( log_param_pair_parse( /*parse*/ false, argv[i] ) ) {
// We have a matching known parameter requiring an argument, // We have a matching known parameter requiring an argument,
// now we need to check if there is anything after this argv // now we need to check if there is anything after this argv
// and flag invalid_param or parse it. // and flag invalid_param or parse it.
@ -558,7 +558,7 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) {
invalid_param = true; invalid_param = true;
break; break;
} }
if( !log_param_pair_parse( /*check_but_dont_parse*/ false, argv[i-1], argv[i]) ) { if( !log_param_pair_parse( /*parse*/ true, argv[i-1], argv[i]) ) {
invalid_param = true; invalid_param = true;
break; break;
} }

View file

@ -196,10 +196,25 @@ class LogStateWrapper
std::atomic<LogTargetWrapper*> _current_target {&_null_target}; std::atomic<LogTargetWrapper*> _current_target {&_null_target};
std::atomic<LogTargetWrapper*> _stored_target {&_null_target}; std::atomic<LogTargetWrapper*> _stored_target {&_null_target};
LogTargetWrapper* log_set_target_impl(const std::string && filename) { return log_set_target_impl(filename); } LogTargetWrapper * log_set_target_impl(const std::string && filename)
LogTargetWrapper* log_set_target_impl(const std::string & filename) { return log_add_select_target(new LogTargetWrapper(filename), true); } {
LogTargetWrapper* log_set_target_impl(FILE* handle) { return log_add_select_target(new LogTargetWrapper(handle), true); } return log_set_target_impl(filename);
LogTargetWrapper* log_set_target_impl(LogTargetWrapper * target) { return log_add_select_target(target); } }
LogTargetWrapper * log_set_target_impl(const std::string & filename)
{
return log_add_select_target(new LogTargetWrapper(filename), true);
}
LogTargetWrapper * log_set_target_impl(FILE * handle)
{
return log_add_select_target(new LogTargetWrapper(handle), true);
}
LogTargetWrapper * log_set_target_impl(LogTargetWrapper * target)
{
return log_add_select_target(target);
}
LogTargetWrapper * log_add_select_target(LogTargetWrapper * t, bool insert = false) LogTargetWrapper * log_add_select_target(LogTargetWrapper * t, bool insert = false)
{ {
@ -306,11 +321,11 @@ class LogStateWrapper
return false; return false;
} }
bool log_param_pair_parse_impl(bool check_but_dont_parse, const std::string & param, const std::string & next = std::string()) bool log_param_pair_parse_impl(bool parse, const std::string & param, const std::string & next = std::string())
{ {
if (param == "--log-file") if (param == "--log-file")
{ {
if (!check_but_dont_parse) if (parse)
{ {
log_flush_all_targets(); log_flush_all_targets();
std::lock_guard<std::mutex> lock(_mutex); std::lock_guard<std::mutex> lock(_mutex);
@ -364,20 +379,65 @@ class LogStateWrapper
} }
public: public:
static LogTargetWrapper* log_set_target(const std::string && filename) { return log_set_target(filename); } static LogTargetWrapper * log_set_target(const std::string &&filename)
static LogTargetWrapper* log_set_target(const std::string & filename) { return instance().log_set_target_impl(filename); } {
static LogTargetWrapper* log_set_target(FILE* handle) { return instance().log_set_target_impl(handle); } return log_set_target(filename);
static LogTargetWrapper* log_set_target(LogTargetWrapper * target) { return instance().log_set_target_impl(target); } }
static FILE* log_handler() { return instance().log_handler_impl(); }
static FILE* log_tee_handler() { return instance().log_tee_handler_impl(); } static LogTargetWrapper * log_set_target(const std::string &filename)
static void log_disable() { instance().log_disable_impl(); } {
static void log_enable() { instance().log_enable_impl(); } return instance().log_set_target_impl(filename);
static bool log_param_single_parse(const std::string & param) { return instance().log_param_single_parse_impl(param); } }
static bool log_param_pair_parse(bool check_but_dont_parse, const std::string & param, const std::string & next = std::string())
{ return instance().log_param_pair_parse_impl(check_but_dont_parse,param,next); } static LogTargetWrapper * log_set_target(FILE * handle)
{
return instance().log_set_target_impl(handle);
}
static LogTargetWrapper * log_set_target(LogTargetWrapper * target)
{
return instance().log_set_target_impl(target);
}
static FILE * log_handler()
{
return instance().log_handler_impl();
}
static FILE * log_tee_handler()
{
return instance().log_tee_handler_impl();
}
static void log_disable()
{
instance().log_disable_impl();
}
static void log_enable()
{
instance().log_enable_impl();
}
static bool log_param_single_parse(const std::string &param)
{
return instance().log_param_single_parse_impl(param);
}
static bool log_param_pair_parse(bool parse, const std::string & param, const std::string & next = "")
{
return instance().log_param_pair_parse_impl(parse, param, next);
}
static std::string log_filename_generator(const std::string & basename, const std::string & extension) static std::string log_filename_generator(const std::string & basename, const std::string & extension)
{ return instance().log_filename_generator_impl(basename,extension); } {
static std::string log_get_pid() { return instance().log_get_pid_impl(); } return instance().log_filename_generator_impl(basename, extension);
}
static std::string log_get_pid()
{
return instance().log_get_pid_impl();
}
}; };
// Specifies a log target. // Specifies a log target.
@ -434,7 +494,8 @@ class LogStateWrapper
// invocation with log_filename_generator( "llama", "log" ) creates a string "llama.<number>.log" // invocation with log_filename_generator( "llama", "log" ) creates a string "llama.<number>.log"
// where the number is a runtime id of the current thread. // where the number is a runtime id of the current thread.
#define log_filename_generator(log_file_basename, log_file_extension) LogStateWrapper::log_filename_generator(log_file_basename, log_file_extension) #define log_filename_generator(log_file_basename, log_file_extension) \
LogStateWrapper::log_filename_generator(log_file_basename, log_file_extension)
// #ifndef LOG_DEFAULT_FILE_NAME // #ifndef LOG_DEFAULT_FILE_NAME
// #define LOG_DEFAULT_FILE_NAME log_filename_generator("llama", "log") // #define LOG_DEFAULT_FILE_NAME log_filename_generator("llama", "log")
@ -448,6 +509,13 @@ class LogStateWrapper
#define LOG_TEE_TARGET_STRING LOG_STRINGIZE(LOG_TEE_TARGET) #define LOG_TEE_TARGET_STRING LOG_STRINGIZE(LOG_TEE_TARGET)
#define LOG_TIMESTAMP \
( \
std::chrono::duration_cast<std::chrono::duration<std::uint64_t>>( \
std::chrono::system_clock::now().time_since_epoch() \
) \
).count()
// Allows disabling timestamps. // Allows disabling timestamps.
// in order to disable, define LOG_NO_TIMESTAMPS // in order to disable, define LOG_NO_TIMESTAMPS
// like so: // like so:
@ -458,10 +526,10 @@ class LogStateWrapper
#ifndef LOG_NO_TIMESTAMPS #ifndef LOG_NO_TIMESTAMPS
#ifndef _MSC_VER #ifndef _MSC_VER
#define LOG_TIMESTAMP_FMT "[%" PRIu64 "] " #define LOG_TIMESTAMP_FMT "[%" PRIu64 "] "
#define LOG_TIMESTAMP_VAL , (std::chrono::duration_cast<std::chrono::duration<std::uint64_t>>(std::chrono::system_clock::now().time_since_epoch())).count() #define LOG_TIMESTAMP_VAL , LOG_TIMESTAMP
#else #else
#define LOG_TIMESTAMP_FMT "[%" PRIu64 "] " #define LOG_TIMESTAMP_FMT "[%" PRIu64 "] "
#define LOG_TIMESTAMP_VAL , (std::chrono::duration_cast<std::chrono::duration<std::uint64_t>>(std::chrono::system_clock::now().time_since_epoch())).count() #define LOG_TIMESTAMP_VAL , LOG_TIMESTAMP
#endif #endif
#else #else
#define LOG_TIMESTAMP_FMT "%s" #define LOG_TIMESTAMP_FMT "%s"
@ -471,10 +539,10 @@ class LogStateWrapper
#ifdef LOG_TEE_TIMESTAMPS #ifdef LOG_TEE_TIMESTAMPS
#ifndef _MSC_VER #ifndef _MSC_VER
#define LOG_TEE_TIMESTAMP_FMT "[%" PRIu64 "] " #define LOG_TEE_TIMESTAMP_FMT "[%" PRIu64 "] "
#define LOG_TEE_TIMESTAMP_VAL , (std::chrono::duration_cast<std::chrono::duration<std::uint64_t>>(std::chrono::system_clock::now().time_since_epoch())).count() #define LOG_TEE_TIMESTAMP_VAL , LOG_TIMESTAMP
#else #else
#define LOG_TEE_TIMESTAMP_FMT "[%" PRIu64 "] " #define LOG_TEE_TIMESTAMP_FMT "[%" PRIu64 "] "
#define LOG_TEE_TIMESTAMP_VAL , (std::chrono::duration_cast<std::chrono::duration<std::uint64_t>>(std::chrono::system_clock::now().time_since_epoch())).count() #define LOG_TEE_TIMESTAMP_VAL , LOG_TIMESTAMP
#endif #endif
#else #else
#define LOG_TEE_TIMESTAMP_FMT "%s" #define LOG_TEE_TIMESTAMP_FMT "%s"
@ -517,12 +585,26 @@ class LogStateWrapper
// INTERNAL, DO NOT USE // INTERNAL, DO NOT USE
// USE LOG() INSTEAD // USE LOG() INSTEAD
// //
#define LOG_FPRINTF_PARAMS_IMPL_GNU(str) \
LOG_TIMESTAMP_FMT LOG_FLF_FMT str "%s" LOG_TIMESTAMP_VAL LOG_FLF_VAL
#define LOG_FPRINTF_PARAMS_IMPL_MSVC(str) \
LOG_TIMESTAMP_FMT LOG_FLF_FMT str "%s" LOG_TIMESTAMP_VAL LOG_FLF_VAL ""
#define LOG_FPRINTF_PARAMS_TEE_IMPL_GNU(str) \
LOG_TEE_TIMESTAMP_FMT LOG_TEE_FLF_FMT str "%s" LOG_TEE_TIMESTAMP_VAL LOG_TEE_FLF_VAL
#define LOG_FPRINTF_PARAMS_TEE_IMPL_MSVC(str) \
LOG_TEE_TIMESTAMP_FMT LOG_TEE_FLF_FMT str "%s" LOG_TEE_TIMESTAMP_VAL LOG_TEE_FLF_VAL ""
#ifndef _MSC_VER #ifndef _MSC_VER
#define LOG_IMPL(str, ...) \ #define LOG_IMPL(str, ...) \
{ \ { \
if (LOG_TARGET != nullptr) \ if (LOG_TARGET != nullptr) \
{ \ { \
fprintf(LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str "%s" LOG_TIMESTAMP_VAL LOG_FLF_VAL, __VA_ARGS__); \ fprintf(LOG_TARGET, LOG_FPRINTF_PARAMS_IMPL_GNU(str), __VA_ARGS__); \
fflush(LOG_TARGET); \ fflush(LOG_TARGET); \
} \ } \
} }
@ -531,7 +613,7 @@ class LogStateWrapper
{ \ { \
if (LOG_TARGET != nullptr) \ if (LOG_TARGET != nullptr) \
{ \ { \
fprintf(LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str "%s" LOG_TIMESTAMP_VAL LOG_FLF_VAL "", ##__VA_ARGS__); \ fprintf(LOG_TARGET, LOG_FPRINTF_PARAMS_IMPL_MSVC(str), ##__VA_ARGS__); \
fflush(LOG_TARGET); \ fflush(LOG_TARGET); \
} \ } \
} }
@ -545,12 +627,12 @@ class LogStateWrapper
{ \ { \
if (LOG_TARGET != nullptr) \ if (LOG_TARGET != nullptr) \
{ \ { \
fprintf(LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str "%s" LOG_TIMESTAMP_VAL LOG_FLF_VAL, __VA_ARGS__); \ fprintf(LOG_TARGET, LOG_FPRINTF_PARAMS_IMPL_GNU(str), __VA_ARGS__); \
fflush(LOG_TARGET); \ fflush(LOG_TARGET); \
} \ } \
if (LOG_TARGET != stdout && LOG_TARGET != stderr && LOG_TEE_TARGET != nullptr) \ if (LOG_TARGET != stdout && LOG_TARGET != stderr && LOG_TEE_TARGET != nullptr) \
{ \ { \
fprintf(LOG_TEE_TARGET, LOG_TEE_TIMESTAMP_FMT LOG_TEE_FLF_FMT str "%s" LOG_TEE_TIMESTAMP_VAL LOG_TEE_FLF_VAL, __VA_ARGS__); \ fprintf(LOG_TEE_TARGET, LOG_FPRINTF_PARAMS_TEE_IMPL_GNU(str), __VA_ARGS__); \
fflush(LOG_TEE_TARGET); \ fflush(LOG_TEE_TARGET); \
} \ } \
} }
@ -559,12 +641,12 @@ class LogStateWrapper
{ \ { \
if (LOG_TARGET != nullptr) \ if (LOG_TARGET != nullptr) \
{ \ { \
fprintf(LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str "%s" LOG_TIMESTAMP_VAL LOG_FLF_VAL "", ##__VA_ARGS__); \ fprintf(LOG_TARGET, LOG_FPRINTF_PARAMS_IMPL_MSVC(str), ##__VA_ARGS__); \
fflush(LOG_TARGET); \ fflush(LOG_TARGET); \
} \ } \
if (LOG_TARGET != stdout && LOG_TARGET != stderr && LOG_TEE_TARGET != nullptr) \ if (LOG_TARGET != stdout && LOG_TARGET != stderr && LOG_TEE_TARGET != nullptr) \
{ \ { \
fprintf(LOG_TEE_TARGET, LOG_TEE_TIMESTAMP_FMT LOG_TEE_FLF_FMT str "%s" LOG_TEE_TIMESTAMP_VAL LOG_TEE_FLF_VAL "", ##__VA_ARGS__); \ fprintf(LOG_TEE_TARGET, LOG_FPRINTF_PARAMS_TEE_IMPL_MSVC(str), ##__VA_ARGS__); \
fflush(LOG_TEE_TARGET); \ fflush(LOG_TEE_TARGET); \
} \ } \
} }
@ -793,7 +875,7 @@ inline void log_print_usage()
printf(" --log-disable Disable trace logs\n"); printf(" --log-disable Disable trace logs\n");
printf(" --log-enable Enable trace logs\n"); printf(" --log-enable Enable trace logs\n");
printf(" --log-file Specify a log filename (without extension)\n"); printf(" --log-file Specify a log filename (without extension)\n");
printf(" Log file will be tagged with unique ID and written as \"<name>.<ID>.log\"\n"); /* */ printf(" Log file will be tagged with unique ID and written as \"<name>.<ID>.log\"\n");
} }
#define log_dump_cmdline(argc, argv) log_dump_cmdline_impl(argc, argv) #define log_dump_cmdline(argc, argv) log_dump_cmdline_impl(argc, argv)