7 #ifndef CLIB_LOGFACILITY_H 8 #define CLIB_LOGFACILITY_H 10 #include <format/format.h> 11 #include <boost/noncopyable.hpp> 30 struct LogFileBehaviour;
45 bool test_for_rollover( std::chrono::time_point<std::chrono::system_clock>& now );
55 template <
typename Sink>
84 void deinitialize_startlog();
120 std::string create( std::string logfilename,
bool open_timestamp );
123 void close(
const std::string&
id );
126 std::map<std::string, std::shared_ptr<LogSinkGenericFile>>
_logfiles;
129 template <
typename log1,
typename log2>
145 template <
typename Sink>
146 void save( fmt::Writer* message,
const std::string&
id );
147 void registerSink(
LogSink* sink );
148 void disableDebugLog();
149 void deinitializeStartLog();
150 void closeFlexLog(
const std::string&
id );
151 std::string registerFlexLogger(
const std::string& logfilename,
bool open_timestamp );
152 void wait_for_empty_queue();
158 std::unique_ptr<LogWorker>
_worker;
163 template <
typename Sink>
168 Message(
const std::string&
id );
170 const std::string& file,
const int line,
171 const std::string&
function );
173 const std::string&
id,
const std::string& file,
const int line,
174 const std::string&
function );
177 fmt::Writer&
message() {
return *( _formater.get() ); }
193 #ifdef DEBUG_LOG_PRINTS 195 #define __FILENAME__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) 197 #define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) 199 #define LOG_PRINT_CALLER_INFO __FILENAME__, __LINE__, __FUNCTION__ 200 #define LOG_PRINT_CALLER_INFO2 , __FILENAME__, __LINE__, __FUNCTION__ 202 #define LOG_PRINT_CALLER_INFO 203 #define LOG_PRINT_CALLER_INFO2 207 #define POLLOG_ERROR \ 208 Clib::Logging::Message< \ 209 Clib::Logging::LogSink_dual<Clib::Logging::LogSink_cerr, Clib::Logging::LogSink_pollog>>( \ 210 LOG_PRINT_CALLER_INFO ) \ 213 #define POLLOG_INFO \ 214 Clib::Logging::Message< \ 215 Clib::Logging::LogSink_dual<Clib::Logging::LogSink_cout, Clib::Logging::LogSink_pollog>>( \ 216 LOG_PRINT_CALLER_INFO ) \ 220 Clib::Logging::Message<Clib::Logging::LogSink_pollog>( LOG_PRINT_CALLER_INFO ).message() 224 Clib::Logging::Message<Clib::Logging::LogSink_cout>( LOG_PRINT_CALLER_INFO ).message() 226 #define INFO_PRINT_TRACE( n ) \ 227 if ( Plib::systemstate.config.debug_level >= n ) \ 230 #define ERROR_PRINT \ 231 Clib::Logging::Message<Clib::Logging::LogSink_cerr>( LOG_PRINT_CALLER_INFO ).message() 235 Clib::Logging::Message<Clib::Logging::LogSink_scriptlog>( LOG_PRINT_CALLER_INFO ).message() 238 if ( !Clib::Logging::LogSink_debuglog::Disabled ) \ 239 Clib::Logging::Message<Clib::Logging::LogSink_debuglog>( LOG_PRINT_CALLER_INFO ).message() 242 Clib::Logging::Message<Clib::Logging::LogSink_leaklog>( LOG_PRINT_CALLER_INFO ).message() 245 #define FLEXLOG( id ) \ 246 Clib::Logging::Message<Clib::Logging::LogSink_flexlog>( id LOG_PRINT_CALLER_INFO2 ).message() 248 #define OPEN_FLEXLOG( filename, open_timestamp ) \ 249 Clib::Logging::global_logger->registerFlexLogger( filename, open_timestamp ) 251 #define CLOSE_FLEXLOG( id ) Clib::Logging::global_logger->closeFlexLog( id ) 254 #define DEINIT_STARTLOG Clib::Logging::global_logger->deinitializeStartLog 257 #define DISABLE_DEBUGLOG Clib::Logging::global_logger->disableDebugLog 259 #define IS_DEBUGLOG_DISABLED Clib::Logging::LogSink_debuglog::Disabled 261 #define GET_LOG_FILESTAMP Clib::Logging::LogSink::getTimeStamp() 264 #endif // CLIB_LOGFACILITY_H virtual ~LogSink_leaklog()
virtual ~LogSinkGenericFile()
void initLogging(LogFacility *logger)
bool test_for_rollover(std::chrono::time_point< std::chrono::system_clock > &now)
static bool _vsDebuggerPresent
std::map< std::string, std::shared_ptr< LogSinkGenericFile > > _logfiles
std::string _log_filename
std::ofstream _filestream
bool LogfileTimestampEveryLine
virtual ~LogSink_scriptlog()
virtual ~LogSink_debuglog()
const LogFileBehaviour * _behaviour
virtual ~LogSink_pollog()
void setBehaviour(const LogFileBehaviour *behaviour, std::string filename)
std::chrono::time_point< std::chrono::system_clock > _lasttimestamp
std::unique_ptr< LogWorker > _worker
std::vector< LogSink * > _registered_sinks
void open_log_file(bool open_timestamp)
virtual void addMessage(fmt::Writer *msg) POL_OVERRIDE
std::unique_ptr< fmt::Writer > _formater
LogFacility * global_logger