formatting
This commit is contained in:
parent
9f630c6681
commit
28cdd8c3b0
2 changed files with 154 additions and 72 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
156
common/log.h
156
common/log.h
|
@ -98,7 +98,7 @@ class LogStateWrapper
|
||||||
void operator=(const LogTargetWrapper &) = delete;
|
void operator=(const LogTargetWrapper &) = delete;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LogTargetWrapper(FILE* handle)
|
LogTargetWrapper(FILE * handle)
|
||||||
: _type(Type::Stream),
|
: _type(Type::Stream),
|
||||||
_opened(true),
|
_opened(true),
|
||||||
_handle(handle)
|
_handle(handle)
|
||||||
|
@ -135,7 +135,7 @@ class LogStateWrapper
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
operator FILE*()
|
operator FILE * ()
|
||||||
{
|
{
|
||||||
if(!_opened)
|
if(!_opened)
|
||||||
{
|
{
|
||||||
|
@ -196,12 +196,27 @@ 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_add_select_target(LogTargetWrapper* t, bool insert = false)
|
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)
|
||||||
{
|
{
|
||||||
log_flush_all_targets();
|
log_flush_all_targets();
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
@ -226,8 +241,8 @@ class LogStateWrapper
|
||||||
for(auto t : _targets){ t->flush(); }
|
for(auto t : _targets){ t->flush(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
FILE* log_handler_impl() { return *_current_target; }
|
FILE * log_handler_impl() { return *_current_target; }
|
||||||
FILE* log_tee_handler_impl() { return _stderr_target; }
|
FILE * log_tee_handler_impl() { return _stderr_target; }
|
||||||
|
|
||||||
void log_disable_impl(bool threadsafe = true)
|
void log_disable_impl(bool threadsafe = true)
|
||||||
{
|
{
|
||||||
|
@ -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 ¶m)
|
||||||
|
{
|
||||||
|
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,13 +875,13 @@ 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)
|
||||||
|
|
||||||
// INTERNAL, DO NOT USE
|
// INTERNAL, DO NOT USE
|
||||||
inline void log_dump_cmdline_impl(int argc, char **argv)
|
inline void log_dump_cmdline_impl(int argc, char ** argv)
|
||||||
{
|
{
|
||||||
std::stringstream buf;
|
std::stringstream buf;
|
||||||
for (int i = 0; i < argc; ++i)
|
for (int i = 0; i < argc; ++i)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue