|
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