DDNet documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
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
12
typedef
void
*
IOHANDLE
;
13
19
class
CLogMessage
20
{
21
public
:
25
LEVEL
m_Level
;
26
bool
m_HaveColor
;
31
LOG_COLOR
m_Color
;
32
char
m_aTimestamp
[80];
33
char
m_aSystem
[32];
37
char
m_aLine
[4096];
38
int
m_TimestampLength
;
39
int
m_SystemLength
;
43
int
m_LineLength
;
44
int
m_LineMessageOffset
;
45
49
const
char
*
Message
()
const
50
{
51
return
m_aLine
+
m_LineMessageOffset
;
52
}
53
};
54
55
class
CLogFilter
56
{
57
public
:
62
std::atomic_int
m_MaxLevel
{
LEVEL_INFO
};
63
64
bool
Filters
(
const
CLogMessage
*pMessage);
65
};
66
67
class
ILogger
68
{
69
protected
:
70
CLogFilter
m_Filter
;
71
72
public
:
73
virtual
~ILogger
() =
default
;
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);
82
OnFilterChange
();
83
}
84
90
virtual
void
Log
(
const
CLogMessage
*pMessage) = 0;
106
virtual
void
GlobalFinish
() {}
110
virtual
void
OnFilterChange
() {}
111
};
112
125
void
log_set_global_logger
(
ILogger
*logger);
126
139
void
log_set_global_logger_default
();
140
152
void
log_global_logger_finish
();
153
160
ILogger
*
log_get_scope_logger
();
161
172
void
log_set_scope_logger
(
ILogger
*logger);
173
181
std::unique_ptr<ILogger>
log_logger_android
();
182
188
std::unique_ptr<ILogger>
log_logger_collection
(std::vector<std::shared_ptr<ILogger>> &&vpLoggers);
189
196
std::unique_ptr<ILogger>
log_logger_default
();
197
205
std::unique_ptr<ILogger>
log_logger_file
(
IOHANDLE
file);
206
214
std::unique_ptr<ILogger>
log_logger_stdout
();
215
223
std::unique_ptr<ILogger>
log_logger_windows_debugger
();
224
230
std::unique_ptr<ILogger>
log_logger_noop
();
231
244
class
CFutureLogger
:
public
ILogger
245
{
246
private
:
247
std::shared_ptr<ILogger>
m_pLogger
;
248
std::vector<CLogMessage>
m_vPending
;
249
CLock
m_PendingLock
;
250
251
public
:
256
void
Set
(std::shared_ptr<ILogger> pLogger)
REQUIRES
(!
m_PendingLock
);
257
void
Log
(
const
CLogMessage
*pMessage)
override
REQUIRES
(!
m_PendingLock
);
258
void
GlobalFinish
()
override
;
259
void
OnFilterChange
()
override
;
260
};
261
273
class
CMemoryLogger
:
public
ILogger
274
{
275
ILogger
*
m_pParentLogger
=
nullptr
;
276
std::vector<CLogMessage>
m_vMessages
GUARDED_BY
(
m_MessagesMutex
);
277
CLock
m_MessagesMutex
;
278
279
public
:
280
void
SetParent
(
ILogger
*pParentLogger) {
m_pParentLogger
= pParentLogger; }
281
void
Log
(
const
CLogMessage
*pMessage)
override
REQUIRES
(!
m_MessagesMutex
);
282
std::vector<CLogMessage>
Lines
()
REQUIRES
(!
m_MessagesMutex
);
283
std::
string
ConcatenatedLines
()
REQUIRES
(!
m_MessagesMutex
);
284
};
285
293
class
CLogScope
294
{
295
ILogger
*
old_scope_logger
;
296
ILogger
*
new_scope_logger
;
297
298
public
:
299
CLogScope
(
ILogger
*logger) :
300
old_scope_logger
(
log_get_scope_logger
()),
301
new_scope_logger
(logger)
302
{
303
log_set_scope_logger
(
new_scope_logger
);
304
}
305
~CLogScope
()
306
{
307
log_set_scope_logger
(
old_scope_logger
);
308
}
309
CLogScope
(
const
CLogScope
&) =
delete
;
310
};
311
#endif
// BASE_LOGGER_H
CFutureLogger
Definition
logger.h:245
CFutureLogger::Log
void Log(const CLogMessage *pMessage) override
Definition
log.cpp:531
CFutureLogger::OnFilterChange
void OnFilterChange() override
Definition
log.cpp:558
CFutureLogger::Set
void Set(std::shared_ptr< ILogger > pLogger)
Definition
log.cpp:513
CFutureLogger::m_pLogger
std::shared_ptr< ILogger > m_pLogger
Definition
logger.h:247
CFutureLogger::m_vPending
std::vector< CLogMessage > m_vPending
Definition
logger.h:248
CFutureLogger::m_PendingLock
CLock m_PendingLock
Definition
logger.h:249
CFutureLogger::GlobalFinish
void GlobalFinish() override
Definition
log.cpp:549
CLock
Definition
lock.h:90
CLogFilter
Definition
logger.h:56
CLogFilter::m_MaxLevel
std::atomic_int m_MaxLevel
Definition
logger.h:62
CLogFilter::Filters
bool Filters(const CLogMessage *pMessage)
Definition
log.cpp:141
CLogMessage
Definition
logger.h:20
CLogMessage::m_LineMessageOffset
int m_LineMessageOffset
Definition
logger.h:44
CLogMessage::m_aSystem
char m_aSystem[32]
Definition
logger.h:33
CLogMessage::m_aLine
char m_aLine[4096]
Definition
logger.h:37
CLogMessage::m_aTimestamp
char m_aTimestamp[80]
Definition
logger.h:32
CLogMessage::m_TimestampLength
int m_TimestampLength
Definition
logger.h:38
CLogMessage::m_HaveColor
bool m_HaveColor
Definition
logger.h:26
CLogMessage::m_Color
LOG_COLOR m_Color
Definition
logger.h:31
CLogMessage::Message
const char * Message() const
Definition
logger.h:49
CLogMessage::m_LineLength
int m_LineLength
Definition
logger.h:43
CLogMessage::m_SystemLength
int m_SystemLength
Definition
logger.h:39
CLogMessage::m_Level
LEVEL m_Level
Definition
logger.h:25
CLogScope::~CLogScope
~CLogScope()
Definition
logger.h:305
CLogScope::old_scope_logger
ILogger * old_scope_logger
Definition
logger.h:295
CLogScope::new_scope_logger
ILogger * new_scope_logger
Definition
logger.h:296
CLogScope::CLogScope
CLogScope(ILogger *logger)
Definition
logger.h:299
CLogScope::CLogScope
CLogScope(const CLogScope &)=delete
CMemoryLogger
Definition
logger.h:274
CMemoryLogger::m_pParentLogger
ILogger * m_pParentLogger
Definition
logger.h:275
CMemoryLogger::Lines
std::vector< CLogMessage > Lines()
Definition
log.cpp:585
CMemoryLogger::ConcatenatedLines
std::string ConcatenatedLines()
Definition
log.cpp:591
CMemoryLogger::SetParent
void SetParent(ILogger *pParentLogger)
Definition
logger.h:280
CMemoryLogger::Log
void Log(const CLogMessage *pMessage) override
Definition
log.cpp:571
CMemoryLogger::m_MessagesMutex
CLock m_MessagesMutex
Definition
logger.h:277
CMemoryLogger::m_vMessages
std::vector< CLogMessage > m_vMessages
Definition
logger.h:276
ILogger
Definition
logger.h:68
ILogger::Log
virtual void Log(const CLogMessage *pMessage)=0
ILogger::m_Filter
CLogFilter m_Filter
Definition
logger.h:70
ILogger::GlobalFinish
virtual void GlobalFinish()
Definition
logger.h:106
ILogger::~ILogger
virtual ~ILogger()=default
ILogger::SetFilter
void SetFilter(const CLogFilter &Filter)
Definition
logger.h:79
ILogger::OnFilterChange
virtual void OnFilterChange()
Definition
logger.h:110
log_logger_noop
std::unique_ptr< ILogger > log_logger_noop()
Definition
log.cpp:503
log_get_scope_logger
ILogger * log_get_scope_logger()
Definition
log.cpp:59
log_set_global_logger
void log_set_global_logger(ILogger *logger)
Definition
log.cpp:31
log_logger_windows_debugger
std::unique_ptr< ILogger > log_logger_windows_debugger()
Definition
log.cpp:488
log_logger_android
std::unique_ptr< ILogger > log_logger_android()
Definition
log.cpp:176
log_logger_file
std::unique_ptr< ILogger > log_logger_file(IOHANDLE logfile)
Definition
log.cpp:287
log_set_global_logger_default
void log_set_global_logger_default()
Definition
log.cpp:54
log_logger_default
std::unique_ptr< ILogger > log_logger_default()
Definition
log.cpp:218
log_logger_stdout
std::unique_ptr< ILogger > log_logger_stdout()
Definition
log.cpp:396
log_set_scope_logger
void log_set_scope_logger(ILogger *logger)
Definition
log.cpp:68
log_logger_collection
std::unique_ptr< ILogger > log_logger_collection(std::vector< std::shared_ptr< ILogger > > &&vpLoggers)
Definition
log.cpp:213
log_global_logger_finish
void log_global_logger_finish()
Definition
log.cpp:47
lock.h
GUARDED_BY
#define GUARDED_BY(x)
Definition
lock.h:22
REQUIRES
#define REQUIRES(...)
Definition
lock.h:34
log.h
LEVEL
LEVEL
Definition
log.h:8
LEVEL_INFO
@ LEVEL_INFO
Definition
log.h:11
IOHANDLE
void * IOHANDLE
Definition
logger.h:12
LOG_COLOR
Definition
log.h:17
src
base
logger.h
Generated by
1.18.0