log4cpp 1.1.6
Loading...
Searching...
No Matches
LogMacros.hh
Go to the documentation of this file.
1/*
2 * LogMacros.hh
3 *
4 * Copyright 2026, Alexander Perepelkin. All rights reserved.
5 *
6 * See the COPYING file for the terms of usage and distribution.
7 */
8
9#ifndef LOG4CPP_LOGMACROS_H
10#define LOG4CPP_LOGMACROS_H
11
12#include <log4cpp/Category.hh>
13#include <sstream>
14
40
41// Possible values for LOG4CPP_ACTIVE_LEVEL.
42// These preprocessor constants correspond to the log4cpp::Priority enum values.
43#define LOG4CPP_PRIORITY_EMERG 0
44#define LOG4CPP_PRIORITY_FATAL 0 // same as EMERG
45#define LOG4CPP_PRIORITY_ALERT 100
46#define LOG4CPP_PRIORITY_CRIT 200
47#define LOG4CPP_PRIORITY_ERROR 300
48#define LOG4CPP_PRIORITY_WARN 400
49#define LOG4CPP_PRIORITY_NOTICE 500
50#define LOG4CPP_PRIORITY_INFO 600
51#define LOG4CPP_PRIORITY_DEBUG 700
52#define LOG4CPP_PRIORITY_NOTSET 800
53
54// Compile-time stripping
55#ifdef LOG4CPP_ACTIVE_LEVEL
56#if LOG4CPP_ACTIVE_LEVEL < LOG4CPP_PRIORITY_DEBUG
57#define LOG4CPP_DISABLE_DEBUG
58#define LOG4CPP_DISABLE_DEBUG_S
59#endif
60#if LOG4CPP_ACTIVE_LEVEL < LOG4CPP_PRIORITY_INFO
61#define LOG4CPP_DISABLE_INFO
62#define LOG4CPP_DISABLE_INFO_S
63#endif
64#if LOG4CPP_ACTIVE_LEVEL < LOG4CPP_PRIORITY_NOTICE
65#define LOG4CPP_DISABLE_NOTICE
66#define LOG4CPP_DISABLE_NOTICE_S
67#endif
68#if LOG4CPP_ACTIVE_LEVEL < LOG4CPP_PRIORITY_WARN
69#define LOG4CPP_DISABLE_WARN
70#define LOG4CPP_DISABLE_WARN_S
71#endif
72#if LOG4CPP_ACTIVE_LEVEL < LOG4CPP_PRIORITY_ERROR
73#define LOG4CPP_DISABLE_ERROR
74#define LOG4CPP_DISABLE_ERROR_S
75#endif
76#if LOG4CPP_ACTIVE_LEVEL < LOG4CPP_PRIORITY_CRIT
77#define LOG4CPP_DISABLE_CRIT
78#define LOG4CPP_DISABLE_CRIT_S
79#endif
80#if LOG4CPP_ACTIVE_LEVEL < LOG4CPP_PRIORITY_ALERT
81#define LOG4CPP_DISABLE_ALERT
82#define LOG4CPP_DISABLE_ALERT_S
83#endif
84#if LOG4CPP_ACTIVE_LEVEL < LOG4CPP_PRIORITY_FATAL
85#define LOG4CPP_DISABLE_FATAL
86#define LOG4CPP_DISABLE_FATAL_S
87#endif
88#if LOG4CPP_ACTIVE_LEVEL < LOG4CPP_PRIORITY_EMERG
89#define LOG4CPP_DISABLE_EMERG
90#define LOG4CPP_DISABLE_EMERG_S
91#endif
92#endif // LOG4CPP_ACTIVE_LEVEL
93
94// Detect variadic macro support
95#if defined(__cplusplus) && __cplusplus >= 201103L
96#define LOG4CPP_VARIADIC_MACROS_SUPPORTED 1
97#elif defined(_MSC_VER) && _MSC_VER >= 1400
98#define LOG4CPP_VARIADIC_MACROS_SUPPORTED 1
99#else
100#define LOG4CPP_VARIADIC_MACROS_SUPPORTED 0
101#endif
102
103// Generic formatted logging
104#if LOG4CPP_VARIADIC_MACROS_SUPPORTED
105#define LOG4CPP_LOG(logger, priority, ...) \
106 do { \
107 if ((logger).isPriorityEnabled(priority)) { \
108 (logger).log(priority, __VA_ARGS__); \
109 } \
110 } while (0)
124#define LOG4CPP_LOG(logger, priority, ...) \
125 do { \
126 if ((logger).isPriorityEnabled(priority)) { \
127 (logger).log(priority, __VA_ARGS__); \
128 } \
129 } while (0)
130
131// Level macros using DISABLE flags
132#ifdef LOG4CPP_DISABLE_DEBUG
133#define LOG4CPP_DEBUG(logger, ...) ((void)0)
134#else
141#define LOG4CPP_DEBUG(logger, ...) LOG4CPP_LOG(logger, log4cpp::Priority::DEBUG, __VA_ARGS__)
142#endif
143
144#ifdef LOG4CPP_DISABLE_INFO
145#define LOG4CPP_INFO(logger, ...) ((void)0)
146#else
153#define LOG4CPP_INFO(logger, ...) LOG4CPP_LOG(logger, log4cpp::Priority::INFO, __VA_ARGS__)
154#endif
155
156#ifdef LOG4CPP_DISABLE_NOTICE
157#define LOG4CPP_NOTICE(logger, ...) ((void)0)
158#else
165#define LOG4CPP_NOTICE(logger, ...) LOG4CPP_LOG(logger, log4cpp::Priority::NOTICE, __VA_ARGS__)
166#endif
167
168#ifdef LOG4CPP_DISABLE_WARN
169#define LOG4CPP_WARN(logger, ...) ((void)0)
170#else
177#define LOG4CPP_WARN(logger, ...) LOG4CPP_LOG(logger, log4cpp::Priority::WARN, __VA_ARGS__)
178#endif
179
180#ifdef LOG4CPP_DISABLE_ERROR
181#define LOG4CPP_ERROR(logger, ...) ((void)0)
182#else
189#define LOG4CPP_ERROR(logger, ...) LOG4CPP_LOG(logger, log4cpp::Priority::ERROR, __VA_ARGS__)
190#endif
191
192#ifdef LOG4CPP_DISABLE_CRIT
193#define LOG4CPP_CRIT(logger, ...) ((void)0)
194#else
201#define LOG4CPP_CRIT(logger, ...) LOG4CPP_LOG(logger, log4cpp::Priority::CRIT, __VA_ARGS__)
202#endif
203
204#ifdef LOG4CPP_DISABLE_ALERT
205#define LOG4CPP_ALERT(logger, ...) ((void)0)
206#else
213#define LOG4CPP_ALERT(logger, ...) LOG4CPP_LOG(logger, log4cpp::Priority::ALERT, __VA_ARGS__)
214#endif
215
216#ifdef LOG4CPP_DISABLE_FATAL
217#define LOG4CPP_FATAL(logger, ...) ((void)0)
218#else
225#define LOG4CPP_FATAL(logger, ...) LOG4CPP_LOG(logger, log4cpp::Priority::FATAL, __VA_ARGS__)
226#endif
227
228#ifdef LOG4CPP_DISABLE_EMERG
229#define LOG4CPP_EMERG(logger, ...) ((void)0)
230#else
237#define LOG4CPP_EMERG(logger, ...) LOG4CPP_LOG(logger, log4cpp::Priority::EMERG, __VA_ARGS__)
238#endif
239
240#else // LOG4CPP_VARIADIC_MACROS_SUPPORTED
241// Fallback for C++98: fixed-argument macros
242#define LOG4CPP_LOG_NO_VA(logger, priority, msg) \
243 do { \
244 if ((logger).isPriorityEnabled(priority)) { \
245 (logger).log(priority, msg); \
246 } \
247 } while (0)
248
249#ifdef LOG4CPP_DISABLE_DEBUG
250#define LOG4CPP_DEBUG(logger, msg) ((void)0)
251#else
252#define LOG4CPP_DEBUG(logger, msg) LOG4CPP_LOG_NO_VA(logger, log4cpp::Priority::DEBUG, msg)
253#endif
254
255#ifdef LOG4CPP_DISABLE_INFO
256#define LOG4CPP_INFO(logger, msg) ((void)0)
257#else
258#define LOG4CPP_INFO(logger, msg) LOG4CPP_LOG_NO_VA(logger, log4cpp::Priority::INFO, msg)
259#endif
260
261#ifdef LOG4CPP_DISABLE_NOTICE
262#define LOG4CPP_NOTICE(logger, msg) ((void)0)
263#else
264#define LOG4CPP_NOTICE(logger, msg) LOG4CPP_LOG_NO_VA(logger, log4cpp::Priority::NOTICE, msg)
265#endif
266
267#ifdef LOG4CPP_DISABLE_WARN
268#define LOG4CPP_WARN(logger, msg) ((void)0)
269#else
270#define LOG4CPP_WARN(logger, msg) LOG4CPP_LOG_NO_VA(logger, log4cpp::Priority::WARN, msg)
271#endif
272
273#ifdef LOG4CPP_DISABLE_ERROR
274#define LOG4CPP_ERROR(logger, msg) ((void)0)
275#else
276#define LOG4CPP_ERROR(logger, msg) LOG4CPP_LOG_NO_VA(logger, log4cpp::Priority::ERROR, msg)
277#endif
278
279#ifdef LOG4CPP_DISABLE_CRIT
280#define LOG4CPP_CRIT(logger, msg) ((void)0)
281#else
282#define LOG4CPP_CRIT(logger, msg) LOG4CPP_LOG_NO_VA(logger, log4cpp::Priority::CRIT, msg)
283#endif
284
285#ifdef LOG4CPP_DISABLE_ALERT
286#define LOG4CPP_ALERT(logger, msg) ((void)0)
287#else
288#define LOG4CPP_ALERT(logger, msg) LOG4CPP_LOG_NO_VA(logger, log4cpp::Priority::ALERT, msg)
289#endif
290
291#ifdef LOG4CPP_DISABLE_FATAL
292#define LOG4CPP_FATAL(logger, msg) ((void)0)
293#else
294#define LOG4CPP_FATAL(logger, msg) LOG4CPP_LOG_NO_VA(logger, log4cpp::Priority::FATAL, msg)
295#endif
296
297#ifdef LOG4CPP_DISABLE_EMERG
298#define LOG4CPP_EMERG(logger, msg) ((void)0)
299#else
300#define LOG4CPP_EMERG(logger, msg) LOG4CPP_LOG_NO_VA(logger, log4cpp::Priority::EMERG, msg)
301#endif
302
303#endif // LOG4CPP_VARIADIC_MACROS_SUPPORTED
304
305// Streaming macros
306// Generic streaming logging
307#define LOG4CPP_STREAM(logger, priority, streamSequence) \
308 do { \
309 if ((logger).isPriorityEnabled(priority)) { \
310 (logger).getStream(priority) << streamSequence; \
311 } \
312 } while (0)
313
314#ifdef LOG4CPP_DISABLE_DEBUG_S
315#define LOG4CPP_DEBUG_S(logger, streamSequence) ((void)0)
316#else
317#define LOG4CPP_DEBUG_S(logger, streamSequence) LOG4CPP_STREAM(logger, log4cpp::Priority::DEBUG, streamSequence)
318#endif
319
320#ifdef LOG4CPP_DISABLE_INFO_S
321#define LOG4CPP_INFO_S(logger, streamSequence) ((void)0)
322#else
323#define LOG4CPP_INFO_S(logger, streamSequence) LOG4CPP_STREAM(logger, log4cpp::Priority::INFO, streamSequence)
324#endif
325
326#ifdef LOG4CPP_DISABLE_NOTICE_S
327#define LOG4CPP_NOTICE_S(logger, streamSequence) ((void)0)
328#else
329#define LOG4CPP_NOTICE_S(logger, streamSequence) LOG4CPP_STREAM(logger, log4cpp::Priority::NOTICE, streamSequence)
330#endif
331
332#ifdef LOG4CPP_DISABLE_WARN_S
333#define LOG4CPP_WARN_S(logger, streamSequence) ((void)0)
334#else
335#define LOG4CPP_WARN_S(logger, streamSequence) LOG4CPP_STREAM(logger, log4cpp::Priority::WARN, streamSequence)
336#endif
337
338#ifdef LOG4CPP_DISABLE_ERROR_S
339#define LOG4CPP_ERROR_S(logger, streamSequence) ((void)0)
340#else
341#define LOG4CPP_ERROR_S(logger, streamSequence) LOG4CPP_STREAM(logger, log4cpp::Priority::ERROR, streamSequence)
342#endif
343
344#ifdef LOG4CPP_DISABLE_CRIT_S
345#define LOG4CPP_CRIT_S(logger, streamSequence) ((void)0)
346#else
347#define LOG4CPP_CRIT_S(logger, streamSequence) LOG4CPP_STREAM(logger, log4cpp::Priority::CRIT, streamSequence)
348#endif
349
350#ifdef LOG4CPP_DISABLE_ALERT_S
351#define LOG4CPP_ALERT_S(logger, streamSequence) ((void)0)
352#else
353#define LOG4CPP_ALERT_S(logger, streamSequence) LOG4CPP_STREAM(logger, log4cpp::Priority::ALERT, streamSequence)
354#endif
355
356#ifdef LOG4CPP_DISABLE_FATAL_S
357#define LOG4CPP_FATAL_S(logger, streamSequence) ((void)0)
358#else
359#define LOG4CPP_FATAL_S(logger, streamSequence) LOG4CPP_STREAM(logger, log4cpp::Priority::FATAL, streamSequence)
360#endif
361
362#ifdef LOG4CPP_DISABLE_EMERG_S
363#define LOG4CPP_EMERG_S(logger, streamSequence) ((void)0)
364#else
365#define LOG4CPP_EMERG_S(logger, streamSequence) LOG4CPP_STREAM(logger, log4cpp::Priority::EMERG, streamSequence)
366#endif
367
368#endif // LOG4CPP_LOGMACROS_H