DDraceNetwork Docs
logger.h
Go to the documentation of this file.
1#ifndef BASE_LOGGER_H
2#define BASE_LOGGER_H
3
4#include "lock.h"
5#include "log.h"
6
7#include <atomic>
8#include <memory>
9#include <string>
10#include <vector>
11
12typedef void *IOHANDLE;
13
20{
21public:
32 char m_aTimestamp[80];
33 char m_aSystem[32];
37 char m_aLine[4096];
45
49 const char *Message() const
50 {
52 }
53};
54
56{
57public:
62 std::atomic_int m_MaxLevel{LEVEL_INFO};
63
64 bool Filters(const CLogMessage *pMessage);
65};
66
68{
69protected:
71
72public:
73 virtual ~ILogger() {}
74
79 void SetFilter(const CLogFilter &Filter)
80 {
81 m_Filter.m_MaxLevel.store(Filter.m_MaxLevel.load(std::memory_order_relaxed), std::memory_order_relaxed);
83 }
84
90 virtual void Log(const CLogMessage *pMessage) = 0;
106 virtual void GlobalFinish() {}
110 virtual void OnFilterChange() {}
111};
112
125void log_set_global_logger(ILogger *logger);
126
139
152
160
171void log_set_scope_logger(ILogger *logger);
172
180std::unique_ptr<ILogger> log_logger_android();
181
187std::unique_ptr<ILogger> log_logger_collection(std::vector<std::shared_ptr<ILogger>> &&vpLoggers);
188
196std::unique_ptr<ILogger> log_logger_file(IOHANDLE file);
197
203std::unique_ptr<ILogger> log_logger_stdout();
204
212std::unique_ptr<ILogger> log_logger_windows_debugger();
213
219std::unique_ptr<ILogger> log_logger_noop();
220
233class CFutureLogger : public ILogger
234{
235private:
236 std::shared_ptr<ILogger> m_pLogger;
237 std::vector<CLogMessage> m_vPending;
239
240public:
245 void Set(std::shared_ptr<ILogger> pLogger) REQUIRES(!m_PendingLock);
246 void Log(const CLogMessage *pMessage) override REQUIRES(!m_PendingLock);
247 void GlobalFinish() override;
248 void OnFilterChange() override;
249};
250
262class CMemoryLogger : public ILogger
263{
265 std::vector<CLogMessage> m_vMessages GUARDED_BY(m_MessagesMutex);
267
268public:
269 void SetParent(ILogger *pParentLogger) { m_pParentLogger = pParentLogger; }
270 void Log(const CLogMessage *pMessage) override REQUIRES(!m_MessagesMutex);
271 std::vector<CLogMessage> Lines() REQUIRES(!m_MessagesMutex);
273};
274
283{
286
287public:
289 old_scope_logger(log_get_scope_logger()),
290 new_scope_logger(logger)
291 {
292 log_set_scope_logger(new_scope_logger);
293 }
295 {
296 //dbg_assert(log_get_scope_logger() == new_scope_logger, "loggers weren't properly scoped");
297 log_set_scope_logger(old_scope_logger);
298 }
299};
300#endif // BASE_LOGGER_H
Definition: logger.h:234
void Log(const CLogMessage *pMessage) override
Definition: log.cpp:517
void OnFilterChange() override
Definition: log.cpp:544
void Set(std::shared_ptr< ILogger > pLogger)
Definition: log.cpp:499
std::shared_ptr< ILogger > m_pLogger
Definition: logger.h:236
std::vector< CLogMessage > m_vPending
Definition: logger.h:237
CLock m_PendingLock
Definition: logger.h:238
void GlobalFinish() override
Definition: log.cpp:535
Definition: lock.h:88
Definition: logger.h:56
std::atomic_int m_MaxLevel
Definition: logger.h:62
bool Filters(const CLogMessage *pMessage)
Definition: log.cpp:144
Definition: logger.h:20
int m_LineMessageOffset
Definition: logger.h:44
char m_aSystem[32]
Definition: logger.h:33
char m_aLine[4096]
Definition: logger.h:37
char m_aTimestamp[80]
Definition: logger.h:32
int m_TimestampLength
Definition: logger.h:38
bool m_HaveColor
Definition: logger.h:26
LOG_COLOR m_Color
Definition: logger.h:31
const char * Message() const
Definition: logger.h:49
int m_LineLength
Definition: logger.h:43
int m_SystemLength
Definition: logger.h:39
LEVEL m_Level
Definition: logger.h:25
Definition: logger.h:283
~CLogScope()
Definition: logger.h:294
ILogger * old_scope_logger
Definition: logger.h:284
ILogger * new_scope_logger
Definition: logger.h:285
CLogScope(ILogger *logger)
Definition: logger.h:288
Definition: logger.h:263
ILogger * m_pParentLogger
Definition: logger.h:264
std::vector< CLogMessage > Lines()
Definition: log.cpp:567
std::string ConcatenatedLines()
Definition: log.cpp:573
void SetParent(ILogger *pParentLogger)
Definition: logger.h:269
void Log(const CLogMessage *pMessage) override
Definition: log.cpp:553
CLock m_MessagesMutex
Definition: logger.h:266
std::vector< CLogMessage > m_vMessages
Definition: logger.h:265
Definition: logger.h:68
virtual void Log(const CLogMessage *pMessage)=0
virtual ~ILogger()
Definition: logger.h:73
CLogFilter m_Filter
Definition: logger.h:70
virtual void GlobalFinish()
Definition: logger.h:106
void SetFilter(const CLogFilter &Filter)
Definition: logger.h:79
virtual void OnFilterChange()
Definition: logger.h:110
std::unique_ptr< ILogger > log_logger_noop()
Definition: log.cpp:494
ILogger * log_get_scope_logger()
Definition: log.cpp:57
void log_set_global_logger(ILogger *logger)
Definition: log.cpp:26
std::unique_ptr< ILogger > log_logger_windows_debugger()
Definition: log.cpp:479
std::unique_ptr< ILogger > log_logger_android()
Definition: log.cpp:176
std::unique_ptr< ILogger > log_logger_file(IOHANDLE file)
Definition: log.cpp:277
void log_set_global_logger_default()
Definition: log.cpp:43
std::unique_ptr< ILogger > log_logger_stdout()
Definition: log.cpp:386
void log_set_scope_logger(ILogger *logger)
Definition: log.cpp:66
std::unique_ptr< ILogger > log_logger_collection(std::vector< std::shared_ptr< ILogger > > &&vpLoggers)
Definition: log.cpp:213
void log_global_logger_finish()
Definition: log.cpp:36
#define GUARDED_BY(x)
Definition: lock.h:20
#define REQUIRES(...)
Definition: lock.h:32
LEVEL
Definition: log.h:14
@ LEVEL_INFO
Definition: log.h:17
void * IOHANDLE
Definition: logger.h:12
Definition: log.h:23