dte test coverage


Directory: ./
File: src/util/log.h
Date: 2025-10-16 19:09:21
Exec Total Coverage
Lines: 5 5 100.0%
Functions: 3 3 100.0%
Branches: 0 0 -%

Line Branch Exec Source
1 #ifndef UTIL_LOG_H
2 #define UTIL_LOG_H
3
4 #include <stdarg.h>
5 #include <stdbool.h>
6 #include <string.h>
7 #include "debug.h"
8 #include "errorcode.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_errno(__FILE__, __LINE__, prefix)
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(cond) if (unlikely(cond)) {LOG_WARNING("%s", #cond);}
32 #define LOG_ERRNO_ON(cond, prefix) if (unlikely(cond)) {LOG_ERRNO(prefix);}
33 #define TRACE_LOGGING_ENABLED (DEBUG >= 3) // See also: src/trace.h
34
35 bool log_level_enabled(LogLevel level);
36
37 #if DEBUG >= 2
38 #define DEBUG_LOGGING_ENABLED 1
39 #define LOG_DEBUG(...) LOG(LOG_LEVEL_DEBUG, __VA_ARGS__)
40 2 static inline bool log_level_debug_enabled(void) {return log_level_enabled(LOG_LEVEL_DEBUG);}
41 #else
42 #define DEBUG_LOGGING_ENABLED 0
43 static inline PRINTF(1) void LOG_DEBUG(const char* UNUSED_ARG(fmt), ...) {}
44 static inline bool log_level_debug_enabled(void) {return false;}
45 #endif
46
47 3 static inline LogLevel log_level_default(void)
48 {
49 3 return DEBUG_LOGGING_ENABLED ? LOG_LEVEL_DEBUG : LOG_LEVEL_INFO;
50 }
51
52 560 static inline LogLevel log_level_max(void)
53 {
54 560 return TRACE_LOGGING_ENABLED ? LOG_LEVEL_TRACE : log_level_default();
55 }
56
57 LogLevel log_open(const char *filename, LogLevel level, bool use_color);
58 bool log_close(void);
59 void log_msg(LogLevel level, const char *file, int line, const char *fmt, ...) PRINTF(4);
60 void log_msgv(LogLevel level, const char *file, int line, const char *fmt, va_list ap) VPRINTF(4);
61 void log_write(LogLevel level, const char *str, size_t len);
62 SystemErrno log_errno(const char *file, int line, const char *prefix) COLD NONNULL_ARGS;
63 LogLevel log_level_from_str(const char *str);
64 const char *log_level_to_str(LogLevel level);
65
66 #endif
67