Line |
Branch |
Exec |
Source |
1 |
|
|
#ifndef UTIL_LOG_H |
2 |
|
|
#define UTIL_LOG_H |
3 |
|
|
|
4 |
|
|
#include <errno.h> |
5 |
|
|
#include <stdarg.h> |
6 |
|
|
#include <stdbool.h> |
7 |
|
|
#include <string.h> |
8 |
|
|
#include "debug.h" |
9 |
|
|
#include "macros.h" |
10 |
|
|
|
11 |
|
|
// NOLINTNEXTLINE(readability-enum-initial-value,cert-int09-c) |
12 |
|
|
typedef enum { |
13 |
|
|
LOG_LEVEL_INVALID = -1, |
14 |
|
|
LOG_LEVEL_NONE = 0, |
15 |
|
|
LOG_LEVEL_CRITICAL, |
16 |
|
|
LOG_LEVEL_ERROR, |
17 |
|
|
LOG_LEVEL_WARNING, |
18 |
|
|
LOG_LEVEL_NOTICE, |
19 |
|
|
LOG_LEVEL_INFO, |
20 |
|
|
LOG_LEVEL_DEBUG, |
21 |
|
|
LOG_LEVEL_TRACE, |
22 |
|
|
} LogLevel; |
23 |
|
|
|
24 |
|
|
#define LOG(level, ...) log_msg(level, __FILE__, __LINE__, __VA_ARGS__) |
25 |
|
|
#define LOG_CRITICAL(...) LOG(LOG_LEVEL_CRITICAL, __VA_ARGS__) |
26 |
|
|
#define LOG_ERROR(...) LOG(LOG_LEVEL_ERROR, __VA_ARGS__) |
27 |
|
|
#define LOG_ERRNO(prefix) LOG_ERROR("%s: %s", prefix, strerror(errno)) |
28 |
|
|
#define LOG_WARNING(...) LOG(LOG_LEVEL_WARNING, __VA_ARGS__) |
29 |
|
|
#define LOG_NOTICE(...) LOG(LOG_LEVEL_NOTICE, __VA_ARGS__) |
30 |
|
|
#define LOG_INFO(...) LOG(LOG_LEVEL_INFO, __VA_ARGS__) |
31 |
|
|
#define WARN_ON(a) do {if (unlikely(a)) {LOG_WARNING("%s", #a);}} while (0) |
32 |
|
|
|
33 |
|
|
bool log_level_enabled(LogLevel level); |
34 |
|
|
|
35 |
|
|
#if DEBUG >= 2 |
36 |
|
|
#define LOG_DEBUG(...) LOG(LOG_LEVEL_DEBUG, __VA_ARGS__) |
37 |
|
✗ |
static inline bool log_level_debug_enabled(void) {return log_level_enabled(LOG_LEVEL_DEBUG);} |
38 |
|
|
#else |
39 |
|
|
static inline PRINTF(1) void LOG_DEBUG(const char* UNUSED_ARG(fmt), ...) {} |
40 |
|
|
static inline bool log_level_debug_enabled(void) {return false;} |
41 |
|
|
#endif |
42 |
|
|
|
43 |
|
|
#if DEBUG >= 3 |
44 |
|
|
#define LOG_TRACE(...) LOG(LOG_LEVEL_TRACE, __VA_ARGS__) |
45 |
|
✗ |
static inline bool log_level_trace_enabled(void) {return log_level_enabled(LOG_LEVEL_TRACE);} |
46 |
|
|
#else |
47 |
|
|
static inline PRINTF(1) void LOG_TRACE(const char* UNUSED_ARG(fmt), ...) {} |
48 |
|
|
static inline bool log_level_trace_enabled(void) {return false;} |
49 |
|
|
#endif |
50 |
|
|
|
51 |
|
|
LogLevel log_open(const char *filename, LogLevel level, bool use_color); |
52 |
|
|
bool log_close(void); |
53 |
|
|
void log_msg(LogLevel level, const char *file, int line, const char *fmt, ...) PRINTF(4); |
54 |
|
|
void log_msgv(LogLevel level, const char *file, int line, const char *fmt, va_list ap) VPRINTF(4); |
55 |
|
|
void log_write(LogLevel level, const char *str, size_t len); |
56 |
|
|
LogLevel log_level_default(void); |
57 |
|
|
LogLevel log_level_from_str(const char *str); |
58 |
|
|
const char *log_level_to_str(LogLevel level); |
59 |
|
|
|
60 |
|
|
#endif |
61 |
|
|
|