You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

459 lines
18 KiB

  1. // -*- C++ -*-
  2. // Module: Log4CPLUS
  3. // File: loggingmacros.h
  4. // Created: 8/2003
  5. // Author: Tad E. Smith
  6. //
  7. //
  8. // Copyright 2003-2013 Tad E. Smith
  9. //
  10. // Licensed under the Apache License, Version 2.0 (the "License");
  11. // you may not use this file except in compliance with the License.
  12. // You may obtain a copy of the License at
  13. //
  14. // http://www.apache.org/licenses/LICENSE-2.0
  15. //
  16. // Unless required by applicable law or agreed to in writing, software
  17. // distributed under the License is distributed on an "AS IS" BASIS,
  18. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  19. // See the License for the specific language governing permissions and
  20. // limitations under the License.
  21. /** @file
  22. * This header defines the logging macros. */
  23. #ifndef LOG4CPLUS_LOGGING_MACROS_HEADER_
  24. #define LOG4CPLUS_LOGGING_MACROS_HEADER_
  25. #include <log4cplus/config.hxx>
  26. #if defined (LOG4CPLUS_HAVE_PRAGMA_ONCE)
  27. #pragma once
  28. #endif
  29. #include <log4cplus/streams.h>
  30. #include <log4cplus/logger.h>
  31. #include <log4cplus/helpers/snprintf.h>
  32. #include <log4cplus/tracelogger.h>
  33. #include <sstream>
  34. #include <utility>
  35. #if defined(_MSC_VER)
  36. #define LOG4CPLUS_SUPPRESS_DOWHILE_WARNING() \
  37. __pragma (warning (push)) \
  38. __pragma (warning (disable:4127))
  39. #define LOG4CPLUS_RESTORE_DOWHILE_WARNING() \
  40. __pragma (warning (pop))
  41. #else
  42. #define LOG4CPLUS_SUPPRESS_DOWHILE_WARNING() /* empty */
  43. #define LOG4CPLUS_RESTORE_DOWHILE_WARNING() /* empty */
  44. #endif
  45. #define LOG4CPLUS_DOWHILE_NOTHING() \
  46. LOG4CPLUS_SUPPRESS_DOWHILE_WARNING() \
  47. do { } while (0) \
  48. LOG4CPLUS_RESTORE_DOWHILE_WARNING()
  49. #if defined(LOG4CPLUS_DISABLE_FATAL) && !defined(LOG4CPLUS_DISABLE_ERROR)
  50. #define LOG4CPLUS_DISABLE_ERROR
  51. #endif
  52. #if defined(LOG4CPLUS_DISABLE_ERROR) && !defined(LOG4CPLUS_DISABLE_WARN)
  53. #define LOG4CPLUS_DISABLE_WARN
  54. #endif
  55. #if defined(LOG4CPLUS_DISABLE_WARN) && !defined(LOG4CPLUS_DISABLE_INFO)
  56. #define LOG4CPLUS_DISABLE_INFO
  57. #endif
  58. #if defined(LOG4CPLUS_DISABLE_INFO) && !defined(LOG4CPLUS_DISABLE_DEBUG)
  59. #define LOG4CPLUS_DISABLE_DEBUG
  60. #endif
  61. #if defined(LOG4CPLUS_DISABLE_DEBUG) && !defined(LOG4CPLUS_DISABLE_TRACE)
  62. #define LOG4CPLUS_DISABLE_TRACE
  63. #endif
  64. namespace log4cplus
  65. {
  66. namespace detail
  67. {
  68. inline
  69. Logger
  70. macros_get_logger (Logger const & logger)
  71. {
  72. return logger;
  73. }
  74. inline
  75. Logger const &
  76. macros_get_logger (Logger & logger)
  77. {
  78. return logger;
  79. }
  80. #if defined (LOG4CPLUS_HAVE_RVALUE_REFS)
  81. inline
  82. Logger
  83. macros_get_logger (Logger && logger)
  84. {
  85. return std::move (logger);
  86. }
  87. #endif
  88. inline
  89. Logger
  90. macros_get_logger (tstring const & logger)
  91. {
  92. return Logger::getInstance (logger);
  93. }
  94. inline
  95. Logger
  96. macros_get_logger (tchar const * logger)
  97. {
  98. return Logger::getInstance (logger);
  99. }
  100. LOG4CPLUS_EXPORT void clear_tostringstream (tostringstream &);
  101. LOG4CPLUS_EXPORT log4cplus::tostringstream & get_macro_body_oss ();
  102. LOG4CPLUS_EXPORT log4cplus::helpers::snprintf_buf & get_macro_body_snprintf_buf ();
  103. LOG4CPLUS_EXPORT void macro_forced_log (log4cplus::Logger const &,
  104. log4cplus::LogLevel, log4cplus::tstring const &, char const *, int,
  105. char const *);
  106. } // namespace detail
  107. } // namespace log4cplus
  108. #undef LOG4CPLUS_MACRO_FUNCTION
  109. #define LOG4CPLUS_MACRO_FUNCTION() 0
  110. #if ! defined (LOG4CPLUS_DISABLE_FUNCTION_MACRO)
  111. # if defined (LOG4CPLUS_HAVE_FUNCSIG_MACRO)
  112. # undef LOG4CPLUS_MACRO_FUNCTION
  113. # define LOG4CPLUS_MACRO_FUNCTION() __FUNCSIG__
  114. # elif defined (LOG4CPLUS_HAVE_PRETTY_FUNCTION_MACRO)
  115. # undef LOG4CPLUS_MACRO_FUNCTION
  116. # define LOG4CPLUS_MACRO_FUNCTION() __PRETTY_FUNCTION__
  117. # elif defined (LOG4CPLUS_HAVE_FUNCTION_MACRO)
  118. # undef LOG4CPLUS_MACRO_FUNCTION
  119. # define LOG4CPLUS_MACRO_FUNCTION() __FUNCTION__
  120. # elif defined (LOG4CPLUS_HAVE_FUNC_SYMBOL)
  121. # undef LOG4CPLUS_MACRO_FUNCTION
  122. # define LOG4CPLUS_MACRO_FUNCTION() __func__
  123. # endif
  124. #endif
  125. // Make TRACE and DEBUG log level unlikely and INFO, WARN, ERROR and
  126. // FATAL log level likely.
  127. #define LOG4CPLUS_MACRO_TRACE_LOG_LEVEL(pred) \
  128. LOG4CPLUS_UNLIKELY (pred)
  129. #define LOG4CPLUS_MACRO_DEBUG_LOG_LEVEL(pred) \
  130. LOG4CPLUS_UNLIKELY (pred)
  131. #define LOG4CPLUS_MACRO_INFO_LOG_LEVEL(pred) \
  132. LOG4CPLUS_LIKELY (pred)
  133. #define LOG4CPLUS_MACRO_WARN_LOG_LEVEL(pred) \
  134. LOG4CPLUS_LIKELY (pred)
  135. #define LOG4CPLUS_MACRO_ERROR_LOG_LEVEL(pred) \
  136. LOG4CPLUS_LIKELY (pred)
  137. #define LOG4CPLUS_MACRO_FATAL_LOG_LEVEL(pred) \
  138. LOG4CPLUS_LIKELY (pred)
  139. //! Dispatch to LOG4CPLUS_MACRO_LOGLEVEL_* depending on log level.
  140. #define LOG4CPLUS_MACRO_LOGLEVEL_PRED(pred, logLevel) \
  141. LOG4CPLUS_MACRO_ ## logLevel (pred)
  142. // Either use temporary instances of ostringstream
  143. // and snprintf_buf, or use thread-local instances.
  144. #if defined (LOG4CPLUS_MACRO_DISABLE_TLS)
  145. # define LOG4CPLUS_MACRO_INSTANTIATE_OSTRINGSTREAM(var) \
  146. log4cplus::tostringstream var
  147. # define LOG4CPLUS_MACRO_INSTANTIATE_SNPRINTF_BUF(var) \
  148. log4cplus::helpers::snprintf_buf var
  149. #else
  150. # define LOG4CPLUS_MACRO_INSTANTIATE_OSTRINGSTREAM(var) \
  151. log4cplus::tostringstream & var \
  152. = log4cplus::detail::get_macro_body_oss ()
  153. # define LOG4CPLUS_MACRO_INSTANTIATE_SNPRINTF_BUF(var) \
  154. log4cplus::helpers::snprintf_buf & var \
  155. = log4cplus::detail::get_macro_body_snprintf_buf ()
  156. #endif
  157. #define LOG4CPLUS_MACRO_BODY(logger, logEvent, logLevel) \
  158. LOG4CPLUS_SUPPRESS_DOWHILE_WARNING() \
  159. do { \
  160. log4cplus::Logger const & _l \
  161. = log4cplus::detail::macros_get_logger (logger); \
  162. if (LOG4CPLUS_MACRO_LOGLEVEL_PRED ( \
  163. _l.isEnabledFor (log4cplus::logLevel), logLevel)) { \
  164. LOG4CPLUS_MACRO_INSTANTIATE_OSTRINGSTREAM (_log4cplus_buf); \
  165. _log4cplus_buf << logEvent; \
  166. log4cplus::detail::macro_forced_log (_l, \
  167. log4cplus::logLevel, _log4cplus_buf.str(), \
  168. __FILE__, __LINE__, LOG4CPLUS_MACRO_FUNCTION ()); \
  169. } \
  170. } while (0) \
  171. LOG4CPLUS_RESTORE_DOWHILE_WARNING()
  172. #define LOG4CPLUS_MACRO_STR_BODY(logger, logEvent, logLevel) \
  173. LOG4CPLUS_SUPPRESS_DOWHILE_WARNING() \
  174. do { \
  175. log4cplus::Logger const & _l \
  176. = log4cplus::detail::macros_get_logger (logger); \
  177. if (LOG4CPLUS_MACRO_LOGLEVEL_PRED ( \
  178. _l.isEnabledFor (log4cplus::logLevel), logLevel)) { \
  179. log4cplus::detail::macro_forced_log (_l, \
  180. log4cplus::logLevel, logEvent, \
  181. __FILE__, __LINE__, LOG4CPLUS_MACRO_FUNCTION ()); \
  182. } \
  183. } while(0) \
  184. LOG4CPLUS_RESTORE_DOWHILE_WARNING()
  185. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  186. #define LOG4CPLUS_MACRO_FMT_BODY(logger, logLevel, logFmt, ...) \
  187. LOG4CPLUS_SUPPRESS_DOWHILE_WARNING() \
  188. do { \
  189. log4cplus::Logger const & _l \
  190. = log4cplus::detail::macros_get_logger (logger); \
  191. if (LOG4CPLUS_MACRO_LOGLEVEL_PRED ( \
  192. _l.isEnabledFor (log4cplus::logLevel), logLevel)) { \
  193. LOG4CPLUS_MACRO_INSTANTIATE_SNPRINTF_BUF (_snpbuf); \
  194. log4cplus::tchar const * _logEvent \
  195. = _snpbuf.print (logFmt, __VA_ARGS__); \
  196. log4cplus::detail::macro_forced_log (_l, \
  197. log4cplus::logLevel, _logEvent, \
  198. __FILE__, __LINE__, LOG4CPLUS_MACRO_FUNCTION ()); \
  199. } \
  200. } while(0) \
  201. LOG4CPLUS_RESTORE_DOWHILE_WARNING()
  202. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  203. #define LOG4CPLUS_MACRO_FMT_BODY(logger, logLevel, logFmt, logArgs...) \
  204. LOG4CPLUS_SUPPRESS_DOWHILE_WARNING() \
  205. do { \
  206. log4cplus::Logger const & _l \
  207. = log4cplus::detail::macros_get_logger (logger); \
  208. if (LOG4CPLUS_MACRO_LOGLEVEL_PRED ( \
  209. _l.isEnabledFor (log4cplus::logLevel), logLevel)) { \
  210. LOG4CPLUS_MACRO_INSTANTIATE_SNPRINTF_BUF (_snpbuf); \
  211. log4cplus::tchar const * _logEvent \
  212. = _snpbuf.print (logFmt, logArgs); \
  213. log4cplus::detail::macro_forced_log (_l, \
  214. log4cplus::logLevel, _logEvent, \
  215. __FILE__, __LINE__, LOG4CPLUS_MACRO_FUNCTION ()); \
  216. } \
  217. } while(0) \
  218. LOG4CPLUS_RESTORE_DOWHILE_WARNING()
  219. #endif
  220. /**
  221. * @def LOG4CPLUS_TRACE(logger, logEvent) This macro creates a
  222. * TraceLogger to log a TRACE_LOG_LEVEL message to <code>logger</code>
  223. * upon entry and exiting of a method.
  224. * <code>logEvent</code> will be streamed into an <code>ostream</code>.
  225. */
  226. #if !defined(LOG4CPLUS_DISABLE_TRACE)
  227. #define LOG4CPLUS_TRACE_METHOD(logger, logEvent) \
  228. log4cplus::TraceLogger _log4cplus_trace_logger(logger, logEvent, \
  229. __FILE__, __LINE__);
  230. #define LOG4CPLUS_TRACE(logger, logEvent) \
  231. LOG4CPLUS_MACRO_BODY (logger, logEvent, TRACE_LOG_LEVEL)
  232. #define LOG4CPLUS_TRACE_STR(logger, logEvent) \
  233. LOG4CPLUS_MACRO_STR_BODY (logger, logEvent, TRACE_LOG_LEVEL)
  234. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  235. #define LOG4CPLUS_TRACE_FMT(logger, logFmt, ...) \
  236. LOG4CPLUS_MACRO_FMT_BODY (logger, TRACE_LOG_LEVEL, logFmt, __VA_ARGS__)
  237. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  238. #define LOG4CPLUS_TRACE_FMT(logger, logFmt, logArgs...) \
  239. LOG4CPLUS_MACRO_FMT_BODY(logger, TRACE_LOG_LEVEL, logFmt, logArgs)
  240. #endif
  241. #else
  242. #define LOG4CPLUS_TRACE_METHOD(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  243. #define LOG4CPLUS_TRACE(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  244. #define LOG4CPLUS_TRACE_STR(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  245. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  246. #define LOG4CPLUS_TRACE_FMT(logger, logFmt, ...) LOG4CPLUS_DOWHILE_NOTHING()
  247. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  248. #define LOG4CPLUS_TRACE_FMT(logger, logFmt, logArgs...) LOG4CPLUS_DOWHILE_NOTHING()
  249. #endif
  250. #endif
  251. /**
  252. * @def LOG4CPLUS_DEBUG(logger, logEvent) This macro is used to log a
  253. * DEBUG_LOG_LEVEL message to <code>logger</code>.
  254. * <code>logEvent</code> will be streamed into an <code>ostream</code>.
  255. */
  256. #if !defined(LOG4CPLUS_DISABLE_DEBUG)
  257. #define LOG4CPLUS_DEBUG(logger, logEvent) \
  258. LOG4CPLUS_MACRO_BODY (logger, logEvent, DEBUG_LOG_LEVEL)
  259. #define LOG4CPLUS_DEBUG_STR(logger, logEvent) \
  260. LOG4CPLUS_MACRO_STR_BODY (logger, logEvent, DEBUG_LOG_LEVEL)
  261. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  262. #define LOG4CPLUS_DEBUG_FMT(logger, logFmt, ...) \
  263. LOG4CPLUS_MACRO_FMT_BODY (logger, DEBUG_LOG_LEVEL, logFmt, __VA_ARGS__)
  264. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  265. #define LOG4CPLUS_DEBUG_FMT(logger, logFmt, logArgs...) \
  266. LOG4CPLUS_MACRO_FMT_BODY(logger, DEBUG_LOG_LEVEL, logFmt, logArgs)
  267. #endif
  268. #else
  269. #define LOG4CPLUS_DEBUG(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  270. #define LOG4CPLUS_DEBUG_STR(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  271. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  272. #define LOG4CPLUS_DEBUG_FMT(logger, logFmt, ...) LOG4CPLUS_DOWHILE_NOTHING()
  273. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  274. #define LOG4CPLUS_DEBUG_FMT(logger, logFmt, logArgs...) LOG4CPLUS_DOWHILE_NOTHING()
  275. #endif
  276. #endif
  277. /**
  278. * @def LOG4CPLUS_INFO(logger, logEvent) This macro is used to log a
  279. * INFO_LOG_LEVEL message to <code>logger</code>.
  280. * <code>logEvent</code> will be streamed into an <code>ostream</code>.
  281. */
  282. #if !defined(LOG4CPLUS_DISABLE_INFO)
  283. #define LOG4CPLUS_INFO(logger, logEvent) \
  284. LOG4CPLUS_MACRO_BODY (logger, logEvent, INFO_LOG_LEVEL)
  285. #define LOG4CPLUS_INFO_STR(logger, logEvent) \
  286. LOG4CPLUS_MACRO_STR_BODY (logger, logEvent, INFO_LOG_LEVEL)
  287. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  288. #define LOG4CPLUS_INFO_FMT(logger, logFmt, ...) \
  289. LOG4CPLUS_MACRO_FMT_BODY (logger, INFO_LOG_LEVEL, logFmt, __VA_ARGS__)
  290. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  291. #define LOG4CPLUS_INFO_FMT(logger, logFmt, logArgs...) \
  292. LOG4CPLUS_MACRO_FMT_BODY(logger, INFO_LOG_LEVEL, logFmt, logArgs)
  293. #endif
  294. #else
  295. #define LOG4CPLUS_INFO(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  296. #define LOG4CPLUS_INFO_STR(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  297. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  298. #define LOG4CPLUS_INFO_FMT(logger, logFmt, ...) LOG4CPLUS_DOWHILE_NOTHING()
  299. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  300. #define LOG4CPLUS_INFO_FMT(logger, logFmt, logArgs...) LOG4CPLUS_DOWHILE_NOTHING()
  301. #endif
  302. #endif
  303. /**
  304. * @def LOG4CPLUS_WARN(logger, logEvent) This macro is used to log a
  305. * WARN_LOG_LEVEL message to <code>logger</code>.
  306. * <code>logEvent</code> will be streamed into an <code>ostream</code>.
  307. */
  308. #if !defined(LOG4CPLUS_DISABLE_WARN)
  309. #define LOG4CPLUS_WARN(logger, logEvent) \
  310. LOG4CPLUS_MACRO_BODY (logger, logEvent, WARN_LOG_LEVEL)
  311. #define LOG4CPLUS_WARN_STR(logger, logEvent) \
  312. LOG4CPLUS_MACRO_STR_BODY (logger, logEvent, WARN_LOG_LEVEL)
  313. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  314. #define LOG4CPLUS_WARN_FMT(logger, logFmt, ...) \
  315. LOG4CPLUS_MACRO_FMT_BODY (logger, WARN_LOG_LEVEL, logFmt, __VA_ARGS__)
  316. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  317. #define LOG4CPLUS_WARN_FMT(logger, logFmt, logArgs...) \
  318. LOG4CPLUS_MACRO_FMT_BODY(logger, WARN_LOG_LEVEL, logFmt, logArgs)
  319. #endif
  320. #else
  321. #define LOG4CPLUS_WARN(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  322. #define LOG4CPLUS_WARN_STR(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  323. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  324. #define LOG4CPLUS_WARN_FMT(logger, logFmt, ...) LOG4CPLUS_DOWHILE_NOTHING()
  325. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  326. #define LOG4CPLUS_WARN_FMT(logger, logFmt, logArgs...) LOG4CPLUS_DOWHILE_NOTHING()
  327. #endif
  328. #endif
  329. /**
  330. * @def LOG4CPLUS_ERROR(logger, logEvent) This macro is used to log a
  331. * ERROR_LOG_LEVEL message to <code>logger</code>.
  332. * <code>logEvent</code> will be streamed into an <code>ostream</code>.
  333. */
  334. #if !defined(LOG4CPLUS_DISABLE_ERROR)
  335. #define LOG4CPLUS_ERROR(logger, logEvent) \
  336. LOG4CPLUS_MACRO_BODY (logger, logEvent, ERROR_LOG_LEVEL)
  337. #define LOG4CPLUS_ERROR_STR(logger, logEvent) \
  338. LOG4CPLUS_MACRO_STR_BODY (logger, logEvent, ERROR_LOG_LEVEL)
  339. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  340. #define LOG4CPLUS_ERROR_FMT(logger, logFmt, ...) \
  341. LOG4CPLUS_MACRO_FMT_BODY (logger, ERROR_LOG_LEVEL, logFmt, __VA_ARGS__)
  342. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  343. #define LOG4CPLUS_ERROR_FMT(logger, logFmt, logArgs...) \
  344. LOG4CPLUS_MACRO_FMT_BODY(logger, ERROR_LOG_LEVEL, logFmt, logArgs)
  345. #endif
  346. #else
  347. #define LOG4CPLUS_ERROR(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  348. #define LOG4CPLUS_ERROR_STR(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  349. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  350. #define LOG4CPLUS_ERROR_FMT(logger, logFmt, ...) LOG4CPLUS_DOWHILE_NOTHING()
  351. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  352. #define LOG4CPLUS_ERROR_FMT(logger, logFmt, logArgs...) LOG4CPLUS_DOWHILE_NOTHING()
  353. #endif
  354. #endif
  355. /**
  356. * @def LOG4CPLUS_FATAL(logger, logEvent) This macro is used to log a
  357. * FATAL_LOG_LEVEL message to <code>logger</code>.
  358. * <code>logEvent</code> will be streamed into an <code>ostream</code>.
  359. */
  360. #if !defined(LOG4CPLUS_DISABLE_FATAL)
  361. #define LOG4CPLUS_FATAL(logger, logEvent) \
  362. LOG4CPLUS_MACRO_BODY (logger, logEvent, FATAL_LOG_LEVEL)
  363. #define LOG4CPLUS_FATAL_STR(logger, logEvent) \
  364. LOG4CPLUS_MACRO_STR_BODY (logger, logEvent, FATAL_LOG_LEVEL)
  365. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  366. #define LOG4CPLUS_FATAL_FMT(logger, logFmt, ...) \
  367. LOG4CPLUS_MACRO_FMT_BODY (logger, FATAL_LOG_LEVEL, logFmt, __VA_ARGS__)
  368. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  369. #define LOG4CPLUS_FATAL_FMT(logger, logFmt, logArgs...) \
  370. LOG4CPLUS_MACRO_FMT_BODY(logger, FATAL_LOG_LEVEL, logFmt, logArgs)
  371. #endif
  372. #else
  373. #define LOG4CPLUS_FATAL(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  374. #define LOG4CPLUS_FATAL_STR(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
  375. #if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
  376. #define LOG4CPLUS_FATAL_FMT(logger, logFmt, ...) LOG4CPLUS_DOWHILE_NOTHING()
  377. #elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
  378. #define LOG4CPLUS_FATAL_FMT(logger, logFmt, logArgs...) LOG4CPLUS_DOWHILE_NOTHING()
  379. #endif
  380. #endif
  381. #endif /* LOG4CPLUS_LOGGING_MACROS_HEADER_ */