log.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Kaspar Schleiser <kaspar@schleiser.de>
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
9 #pragma once
10 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
54 enum {
56  LOG_ERROR,
59  LOG_WARNING,
61  LOG_INFO,
64  LOG_DEBUG,
66  LOG_ALL
67 };
68 
69 #ifndef LOG_LEVEL
73 #define LOG_LEVEL LOG_INFO
74 #endif
75 
81 #ifdef LOG_UNIT
82 # define LOG_WRITE(level, fmt, ...) log_write((level), "%s: "fmt, LOG_UNIT, ##__VA_ARGS__)
83 #else
84 # define LOG_WRITE(level, ...) log_write((level), __VA_ARGS__)
85 #endif
86 
90 #ifdef __clang__ /* following pragmas required for clang 3.8.0 */
91 #define LOG(level, ...) do { \
92  _Pragma("clang diagnostic push") \
93  _Pragma("clang diagnostic ignored \"-Wtautological-compare\"") \
94  if ((level) <= LOG_LEVEL) LOG_WRITE((level), __VA_ARGS__); } while (0U) \
95  _Pragma("clang diagnostic pop")
96 #else
97 #define LOG(level, ...) do { \
98  if ((level) <= LOG_LEVEL) LOG_WRITE((level), __VA_ARGS__); } while (0U)
99 #endif /* __clang__ */
100 
105 #define LOG_ERROR(...) LOG(LOG_ERROR, __VA_ARGS__)
106 #define LOG_WARNING(...) LOG(LOG_WARNING, __VA_ARGS__)
107 #define LOG_INFO(...) LOG(LOG_INFO, __VA_ARGS__)
122 #define LOG_DEBUG(...) LOG(LOG_DEBUG, __VA_ARGS__)
125 #ifdef MODULE_LOG
126 #include "log_module.h"
127 #else
128 #include <stdio.h>
129 
133 #define log_write(level, ...) printf(__VA_ARGS__)
134 #endif
135 
136 #ifdef __cplusplus
137 }
138 #endif
139 
#define LOG_INFO(...)
for the curious
Definition: log.h:107
#define LOG_DEBUG(...)
Print a log message, if LOG_LEVEL is defined to be at least LOG_DEBUG
Definition: log.h:122
@ LOG_NONE
Lowest log level, will output nothing.
Definition: log.h:55
@ LOG_ALL
print everything
Definition: log.h:66
#define LOG_ERROR(...)
log an error
Definition: log.h:105
#define LOG_WARNING(...)
log a warning
Definition: log.h:106