|
17 | 17 | // * passing a logger around using a `Logger& logger` function parameter
|
18 | 18 | // They are created with a name that appears in the logs and can be used to filter debug levels (see
|
19 | 19 | // `Logger`).
|
20 |
| -#define LOG_CRITICAL(...) LOG_IMPL(codeql::Log::Level::critical, __VA_ARGS__) |
21 |
| -#define LOG_ERROR(...) LOG_IMPL(codeql::Log::Level::error, __VA_ARGS__) |
22 |
| -#define LOG_WARNING(...) LOG_IMPL(codeql::Log::Level::warning, __VA_ARGS__) |
23 |
| -#define LOG_INFO(...) LOG_IMPL(codeql::Log::Level::info, __VA_ARGS__) |
24 |
| -#define LOG_DEBUG(...) LOG_IMPL(codeql::Log::Level::debug, __VA_ARGS__) |
25 |
| -#define LOG_TRACE(...) LOG_IMPL(codeql::Log::Level::trace, __VA_ARGS__) |
| 20 | +#define LOG_CRITICAL(...) LOG_WITH_LEVEL(codeql::Log::Level::critical, __VA_ARGS__) |
| 21 | +#define LOG_ERROR(...) LOG_WITH_LEVEL(codeql::Log::Level::error, __VA_ARGS__) |
| 22 | +#define LOG_WARNING(...) LOG_WITH_LEVEL(codeql::Log::Level::warning, __VA_ARGS__) |
| 23 | +#define LOG_INFO(...) LOG_WITH_LEVEL(codeql::Log::Level::info, __VA_ARGS__) |
| 24 | +#define LOG_DEBUG(...) LOG_WITH_LEVEL(codeql::Log::Level::debug, __VA_ARGS__) |
| 25 | +#define LOG_TRACE(...) LOG_WITH_LEVEL(codeql::Log::Level::trace, __VA_ARGS__) |
| 26 | + |
| 27 | +// only do the actual logging if the picked up `Logger` instance is configured to handle the |
| 28 | +// provided log level. `LEVEL` must be a compile-time constant. `logger()` is evaluated once |
| 29 | +#define LOG_WITH_LEVEL(LEVEL, ...) \ |
| 30 | + do { \ |
| 31 | + constexpr codeql::Log::Level _level = LEVEL; \ |
| 32 | + codeql::Logger& _logger = logger(); \ |
| 33 | + if (_level >= _logger.level()) { \ |
| 34 | + BINLOG_CREATE_SOURCE_AND_EVENT(_logger.writer(), _level, /* category */, binlog::clockNow(), \ |
| 35 | + __VA_ARGS__); \ |
| 36 | + } \ |
| 37 | + } while (false) |
26 | 38 |
|
27 | 39 | // avoid calling into binlog's original macros
|
28 | 40 | #undef BINLOG_CRITICAL
|
|
50 | 62 | #undef BINLOG_TRACE_C
|
51 | 63 | #undef BINLOG_TRACE_WC
|
52 | 64 |
|
53 |
| -// only do the actual logging if the picked up `Logger` instance is configured to handle the |
54 |
| -// provided log level |
55 |
| -#define LOG_IMPL(severity, ...) \ |
56 |
| - do { \ |
57 |
| - if (auto& _logger = logger(); severity >= _logger.level()) { \ |
58 |
| - BINLOG_CREATE_SOURCE_AND_EVENT(_logger.writer(), severity, , binlog::clockNow(), \ |
59 |
| - __VA_ARGS__); \ |
60 |
| - } \ |
61 |
| - } while (false) |
62 |
| - |
63 | 65 | namespace codeql {
|
64 | 66 |
|
65 | 67 | // This class is responsible for the global log state (outputs, log level rules, flushing)
|
|
0 commit comments