logog
logger optimized for games
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
macro.hpp
Go to the documentation of this file.
1
5
#ifndef __LOGOG_MACRO_HPP__
6
#define __LOGOG_MACRO_HPP__
7
8
namespace
logog
9
{
10
#ifdef LOGOG_USE_PREFIX
11
#define LOGOG_PREFIX LOGOG_
12
#endif // LOGOG_USE_PREFIX
13
14
#ifndef LOGOG_GROUP
15
18
#define LOGOG_GROUP NULL
19
#endif
20
21
#ifndef LOGOG_CATEGORY
22
25
#define LOGOG_CATEGORY NULL
26
#endif
27
33
#define TOKENPASTE2(x, y) x ## y
34
35
#define TOKENPASTE(x, y) TOKENPASTE2(x, y)
36
41
#define LOGOG_LEVEL_GROUP_CATEGORY_MESSAGE_NO_VA( level, group, cat, msg ) \
42
{ \
43
Mutex *___pMCM = &GetMessageCreationMutex(); \
44
___pMCM->MutexLock(); \
45
static logog::Message *TOKENPASTE(_logog_,__LINE__) = new logog::Message( level, \
46
LOGOG_CONST_STRING( __FILE__ ), \
47
__LINE__ , \
48
LOGOG_CONST_STRING( group ), \
49
LOGOG_CONST_STRING( cat ), \
50
msg; \
51
___pMCM->MutexUnlock(); \
52
TOKENPASTE(_logog_,__LINE__)->m_Transmitting.MutexLock(); \
53
TOKENPASTE(_logog_,__LINE__)->Transmit(); \
54
TOKENPASTE(_logog_,__LINE__)->m_Transmitting.MutexUnlock(); \
55
}
56
76
#define LOGOG_LEVEL_GROUP_CATEGORY_MESSAGE( level, group, cat, formatstring, ... ) \
77
LOGOG_MICROSOFT_PRAGMA_IN_MACRO(warning(push)) \
78
LOGOG_MICROSOFT_PRAGMA_IN_MACRO(warning(disable : 4127 )) \
79
do \
80
{ \
81
::logog::Mutex *___pMCM = &::logog::GetMessageCreationMutex(); \
82
___pMCM->MutexLock(); \
83
static bool TOKENPASTE(_logog_static_bool_,__LINE__) = false; \
84
static logog::Message * TOKENPASTE(_logog_,__LINE__); \
85
if ( TOKENPASTE(_logog_static_bool_,__LINE__) == false ) \
86
{ \
87
TOKENPASTE(_logog_,__LINE__) = \
88
new logog::Message( level, \
89
LOGOG_CONST_STRING( __FILE__ ), \
90
__LINE__ , \
91
LOGOG_CONST_STRING( group ), \
92
LOGOG_CONST_STRING( cat ), \
93
LOGOG_CONST_STRING( "" ), \
94
0.0f, \
95
& (TOKENPASTE(_logog_static_bool_,__LINE__)) ); \
96
} \
97
___pMCM->MutexUnlock(); \
98
/* A race condition could theoretically occur here if you are shutting down at the same instant as sending log messages. */
\
99
TOKENPASTE(_logog_,__LINE__)->m_Transmitting.MutexLock(); \
100
TOKENPASTE(_logog_,__LINE__)->Format( formatstring, ##__VA_ARGS__ ); \
101
TOKENPASTE(_logog_,__LINE__)->Transmit(); \
102
TOKENPASTE(_logog_,__LINE__)->m_Transmitting.MutexUnlock(); \
103
} while (false) \
104
LOGOG_MICROSOFT_PRAGMA_IN_MACRO(warning(pop))
105
109
#define LOGOG_LEVEL_MESSAGE( level, formatstring, ... ) \
110
LOGOG_LEVEL_GROUP_CATEGORY_MESSAGE( level, LOGOG_GROUP, LOGOG_CATEGORY, formatstring, ##__VA_ARGS__ )
111
113
#define LOGOG_MESSAGE( formatstring, ... ) \
114
LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL, formatstring, ##__VA_ARGS__ )
115
116
117
#if LOGOG_LEVEL >= LOGOG_LEVEL_DEBUG
118
119
#define LOGOG_DEBUG( formatstring, ... ) \
120
LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_DEBUG, formatstring, ##__VA_ARGS__ )
121
#else
122
#define LOGOG_DEBUG( formatstring, ... ) do {} while (false)
123
#endif
124
125
#if LOGOG_LEVEL >= LOGOG_LEVEL_INFO
126
127
#define LOGOG_INFO( formatstring, ... ) \
128
LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_INFO, formatstring, ##__VA_ARGS__ )
129
#else
130
#define LOGOG_INFO( formatstring, ... ) do {} while (false)
131
#endif
132
133
#if LOGOG_LEVEL >= LOGOG_LEVEL_WARN3
134
135
#define LOGOG_WARN3( formatstring, ... ) \
136
LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_WARN3, formatstring, ##__VA_ARGS__ )
137
#else
138
#define LOGOG_WARN3( formatstring, ... ) do {} while (false)
139
#endif
140
141
#if LOGOG_LEVEL >= LOGOG_LEVEL_WARN2
142
143
#define LOGOG_WARN2( formatstring, ... ) \
144
LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_WARN2, formatstring, ##__VA_ARGS__ )
145
#else
146
#define LOGOG_WARN2( formatstring, ... ) do {} while (false)
147
#endif
148
149
#if LOGOG_LEVEL >= LOGOG_LEVEL_WARN1
150
151
#define LOGOG_WARN1( formatstring, ... ) \
152
LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_WARN1, formatstring, ##__VA_ARGS__ )
153
#else
154
#define LOGOG_WARN1( formatstring, ... ) do {} while (false)
155
#endif
156
157
#if LOGOG_LEVEL >= LOGOG_LEVEL_WARN
158
159
#define LOGOG_WARN( formatstring, ... ) \
160
LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_WARN, formatstring, ##__VA_ARGS__ )
161
#else
162
#define LOGOG_WARN( formatstring, ... ) do {} while (false)
163
#endif
164
165
#if LOGOG_LEVEL >= LOGOG_LEVEL_ERROR
166
167
#define LOGOG_ERROR( formatstring, ... ) \
168
LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_ERROR, formatstring, ##__VA_ARGS__ )
169
#else
170
#define LOGOG_ERROR( formatstring, ... ) do {} while (false)
171
#endif
172
173
#if LOGOG_LEVEL >= LOGOG_LEVEL_CRITICAL
174
175
#define LOGOG_CRITICAL( formatstring, ... ) \
176
LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_CRITICAL, formatstring, ##__VA_ARGS__ )
177
#else
178
#define LOGOG_CRITICAL( formatstring, ... ) do {} while (false)
179
#endif
180
181
#if LOGOG_LEVEL >= LOGOG_LEVEL_ALERT
182
183
#define LOGOG_ALERT( formatstring, ... ) \
184
LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_ALERT, formatstring, ##__VA_ARGS__ )
185
#else
186
#define LOGOG_ALERT( formatstring, ... ) do {} while (false)
187
#endif
188
189
#if LOGOG_LEVEL >= LOGOG_LEVEL_EMERGENCY
190
191
#define LOGOG_EMERGENCY( formatstring, ... ) \
192
LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_EMERGENCY, formatstring, ##__VA_ARGS__ )
193
#else
194
#define LOGOG_EMERGENCY( formatstring, ... ) do {} while (false)
195
#endif
196
197
#define LOGOG_SET_LEVEL( level ) \
198
::logog::SetDefaultLevel( level );
199
203
#ifndef LOGOG_USE_PREFIX
204
/* If you get compilation errors in this section, then define the flag LOGOG_USE_PREFIX during compilation, and these
205
* shorthand logging macros won't exist -- you'll need to use the LOGOG_* equivalents above.
206
*/
207
/* We can't use DEBUG in Win32 unfortunately, so we use DBUG for shorthand here. */
209
210
#define DBUG(...) LOGOG_DEBUG( __VA_ARGS__ )
211
212
#define INFO(...) LOGOG_INFO( __VA_ARGS__ )
213
214
#define WARN3(...) LOGOG_WARN3( __VA_ARGS__ )
215
216
#define WARN2(...) LOGOG_WARN2( __VA_ARGS__ )
217
218
#define WARN1(...) LOGOG_WARN1( __VA_ARGS__ )
219
220
#define WARN(...) LOGOG_WARN( __VA_ARGS__ )
221
222
#define ERR(...) LOGOG_ERROR( __VA_ARGS__ )
223
224
#define ALERT(...) LOGOG_ALERT( __VA_ARGS__ )
225
226
#define CRITICAL(...) LOGOG_CRITICAL( __VA_ARGS__ )
227
228
#define EMERGENCY(...) LOGOG_EMERGENCY( __VA_ARGS__ )
229
#endif
231
235
#define LOGOG_INITIALIZE(...) logog::Initialize( __VA_ARGS__ )
236
240
#define LOGOG_SHUTDOWN() logog::Shutdown()
241
242
}
// namespace logog
243
244
#endif // __LOGOG_MACRO_HPP_
logog
[Thread]
Definition:
api.hpp:8
include
macro.hpp
Generated on Wed Jul 26 2017 00:58:02 for logog by
1.8.10