formatting
This commit is contained in:
parent
130f5fb1ed
commit
9f630c6681
1 changed files with 44 additions and 40 deletions
84
common/log.h
84
common/log.h
|
@ -77,15 +77,15 @@ class LogStateWrapper
|
||||||
~LogStateWrapper()
|
~LogStateWrapper()
|
||||||
{
|
{
|
||||||
log_flush_all_targets();
|
log_flush_all_targets();
|
||||||
for(auto t: _targets){delete t;}
|
for(auto t : _targets){ delete t; }
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
LogStateWrapper( LogStateWrapper& other ) = delete;
|
LogStateWrapper(LogStateWrapper & other) = delete;
|
||||||
void operator=( const LogStateWrapper& ) = delete;
|
void operator=(const LogStateWrapper &) = delete;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static LogStateWrapper& instance()
|
static LogStateWrapper & instance()
|
||||||
{
|
{
|
||||||
static LogStateWrapper inst;
|
static LogStateWrapper inst;
|
||||||
return inst;
|
return inst;
|
||||||
|
@ -94,21 +94,21 @@ class LogStateWrapper
|
||||||
class LogTargetWrapper
|
class LogTargetWrapper
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
LogTargetWrapper( LogTargetWrapper& other ) = delete;
|
LogTargetWrapper(LogTargetWrapper & other) = delete;
|
||||||
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)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
LogTargetWrapper( const std::string && filename )
|
LogTargetWrapper(const std::string && filename)
|
||||||
: LogTargetWrapper(filename)
|
: LogTargetWrapper(filename)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
LogTargetWrapper( const std::string & filename )
|
LogTargetWrapper(const std::string & filename)
|
||||||
: _filename(filename)
|
: _filename(filename)
|
||||||
{
|
{
|
||||||
if(_filename.empty())
|
if(_filename.empty())
|
||||||
|
@ -125,7 +125,7 @@ class LogStateWrapper
|
||||||
|
|
||||||
~LogTargetWrapper()
|
~LogTargetWrapper()
|
||||||
{
|
{
|
||||||
if(_type == Type::File && _handle != nullptr) {std::fclose(_handle);}
|
if(_type == Type::File && _handle != nullptr) { std::fclose(_handle); }
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class Type{
|
enum class Type{
|
||||||
|
@ -139,17 +139,21 @@ class LogStateWrapper
|
||||||
{
|
{
|
||||||
if(!_opened)
|
if(!_opened)
|
||||||
{
|
{
|
||||||
while( _lock.test_and_set(std::memory_order_acquire) ){ std::this_thread::yield(); }
|
while(_lock.test_and_set(std::memory_order_acquire)){ std::this_thread::yield(); }
|
||||||
if(!_opened && _type == Type::File) // check for opened again after acquiring a lock
|
if(!_opened && _type == Type::File) // check for opened again after acquiring a lock
|
||||||
{
|
{
|
||||||
auto result = std::fopen(_filename.c_str(), "w");
|
auto result = std::fopen(_filename.c_str(), "w");
|
||||||
if( result )
|
if(result)
|
||||||
{
|
{
|
||||||
_handle = result;
|
_handle = result;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::fprintf(stderr, "Failed to open logfile '%s' with error '%s'\n", _filename.c_str(), std::strerror(errno));
|
std::fprintf(
|
||||||
|
stderr,
|
||||||
|
"Failed to open logfile '%s' with error '%s'\n",
|
||||||
|
_filename.c_str(), std::strerror(errno)
|
||||||
|
);
|
||||||
std::fflush(stderr);
|
std::fflush(stderr);
|
||||||
_handle = stderr;
|
_handle = stderr;
|
||||||
}
|
}
|
||||||
|
@ -162,7 +166,7 @@ class LogStateWrapper
|
||||||
|
|
||||||
void flush()
|
void flush()
|
||||||
{
|
{
|
||||||
while( _lock.test_and_set(std::memory_order_acquire) ){ std::this_thread::yield(); }
|
while(_lock.test_and_set(std::memory_order_acquire)){ std::this_thread::yield(); }
|
||||||
if(_opened && _type != Type::Invalid && _handle)
|
if(_opened && _type != Type::Invalid && _handle)
|
||||||
{
|
{
|
||||||
std::fflush(_handle);
|
std::fflush(_handle);
|
||||||
|
@ -192,17 +196,17 @@ 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) { return log_set_target_impl(filename); }
|
||||||
LogTargetWrapper* log_set_target_impl( const std::string & filename ) {return log_add_select_target(new LogTargetWrapper(filename), true);}
|
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(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_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)
|
||||||
{
|
{
|
||||||
log_flush_all_targets();
|
log_flush_all_targets();
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
|
||||||
if( _global_override_target == LogTriState::True)
|
if(_global_override_target == LogTriState::True)
|
||||||
{
|
{
|
||||||
if(_enabled || _global_override_enabled == LogTriState::True) return _current_target;
|
if(_enabled || _global_override_enabled == LogTriState::True) return _current_target;
|
||||||
return _stored_target;
|
return _stored_target;
|
||||||
|
@ -219,15 +223,15 @@ class LogStateWrapper
|
||||||
void log_flush_all_targets()
|
void log_flush_all_targets()
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
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)
|
||||||
{
|
{
|
||||||
if( threadsafe )
|
if(threadsafe)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
log_disable_impl_unsafe();
|
log_disable_impl_unsafe();
|
||||||
|
@ -248,9 +252,9 @@ class LogStateWrapper
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void log_enable_impl( bool threadsafe = true )
|
void log_enable_impl(bool threadsafe = true)
|
||||||
{
|
{
|
||||||
if( threadsafe )
|
if(threadsafe)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
log_enable_impl_unsafe();
|
log_enable_impl_unsafe();
|
||||||
|
@ -273,13 +277,13 @@ class LogStateWrapper
|
||||||
bool log_param_single_parse_impl(const std::string & param)
|
bool log_param_single_parse_impl(const std::string & param)
|
||||||
{
|
{
|
||||||
#ifdef LOG_WITH_TEST
|
#ifdef LOG_WITH_TEST
|
||||||
if ( param == "--log-test")
|
if (param == "--log-test")
|
||||||
{
|
{
|
||||||
log_test();
|
log_test();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if ( param == "--log-disable")
|
if (param == "--log-disable")
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
@ -289,7 +293,7 @@ class LogStateWrapper
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( param == "--log-enable")
|
if (param == "--log-enable")
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
@ -304,7 +308,7 @@ class LogStateWrapper
|
||||||
|
|
||||||
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 check_but_dont_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 (!check_but_dont_parse)
|
||||||
{
|
{
|
||||||
|
@ -360,20 +364,20 @@ 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) { return log_set_target(filename); }
|
||||||
static LogTargetWrapper* log_set_target( const std::string & filename ) {return instance().log_set_target_impl(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);}
|
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 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_handler() { return instance().log_handler_impl(); }
|
||||||
static FILE* log_tee_handler() {return instance().log_tee_handler_impl();}
|
static FILE* log_tee_handler() { return instance().log_tee_handler_impl(); }
|
||||||
static void log_disable() {instance().log_disable_impl();}
|
static void log_disable() { instance().log_disable_impl(); }
|
||||||
static void log_enable() {instance().log_enable_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_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())
|
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);}
|
{ return instance().log_param_pair_parse_impl(check_but_dont_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);}
|
{ return instance().log_filename_generator_impl(basename,extension); }
|
||||||
static std::string log_get_pid() {return instance().log_get_pid_impl();}
|
static std::string log_get_pid() { return instance().log_get_pid_impl(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Specifies a log target.
|
// Specifies a log target.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue