log.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2015 Kaspar Schleiser <kaspar@schleiser.de>
3  * SPDX-License-Identifier: LGPL-2.1-only
4  */
5 
6 #pragma once
7 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
51 enum {
53  LOG_ERROR,
56  LOG_WARNING,
58  LOG_INFO,
61  LOG_DEBUG,
63  LOG_ALL
64 };
65 
66 #ifndef LOG_LEVEL
70 #define LOG_LEVEL LOG_INFO
71 #endif
72 
78 #ifdef LOG_UNIT
79 # define LOG_WRITE(level, fmt, ...) log_write((level), "%s: "fmt, LOG_UNIT, ##__VA_ARGS__)
80 #else
81 # define LOG_WRITE(level, ...) log_write((level), __VA_ARGS__)
82 #endif
83 
87 #ifdef __clang__ /* following pragmas required for clang 3.8.0 */
88 #define LOG(level, ...) do { \
89  _Pragma("clang diagnostic push") \
90  _Pragma("clang diagnostic ignored \"-Wtautological-compare\"") \
91  if ((level) <= LOG_LEVEL) LOG_WRITE((level), __VA_ARGS__); } while (0U) \
92  _Pragma("clang diagnostic pop")
93 #else
94 #define LOG(level, ...) do { \
95  if ((level) <= LOG_LEVEL) LOG_WRITE((level), __VA_ARGS__); } while (0U)
96 #endif /* __clang__ */
97 
102 #define LOG_ERROR(...) LOG(LOG_ERROR, __VA_ARGS__)
103 #define LOG_WARNING(...) LOG(LOG_WARNING, __VA_ARGS__)
104 #define LOG_INFO(...) LOG(LOG_INFO, __VA_ARGS__)
119 #define LOG_DEBUG(...) LOG(LOG_DEBUG, __VA_ARGS__)
122 #ifdef MODULE_LOG
123 #include "log_module.h"
124 #else
125 #include <stdio.h>
126 
130 #define log_write(level, ...) printf(__VA_ARGS__)
131 #endif
132 
133 #ifdef __cplusplus
134 }
135 #endif
136 
#define LOG_INFO(...)
for the curious
Definition: log.h:104
#define LOG_DEBUG(...)
Print a log message, if LOG_LEVEL is defined to be at least LOG_DEBUG
Definition: log.h:119
@ LOG_NONE
Lowest log level, will output nothing.
Definition: log.h:52
@ LOG_ALL
print everything
Definition: log.h:63
#define LOG_ERROR(...)
log an error
Definition: log.h:102
#define LOG_WARNING(...)
log a warning
Definition: log.h:103