Loading...
Searching...
No Matches
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
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
51enum {
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) { \
92 LOG_WRITE((level), __VA_ARGS__); \
93 } \
94 } while (0U) \
95 _Pragma("clang diagnostic pop")
96#else
97#define LOG(level, ...) do { \
98 if ((level) <= LOG_LEVEL) { \
99 LOG_WRITE((level), __VA_ARGS__); \
100 } \
101 } while (0U)
102#endif /* __clang__ */
103
108#define LOG_ERROR(...) LOG(LOG_ERROR, __VA_ARGS__)
109#define LOG_WARNING(...) LOG(LOG_WARNING, __VA_ARGS__)
110#define LOG_INFO(...) LOG(LOG_INFO, __VA_ARGS__)
125#define LOG_DEBUG(...) LOG(LOG_DEBUG, __VA_ARGS__)
127
128#ifdef MODULE_LOG
129#include "log_module.h"
130#else
131#include <stdio.h>
132
136#define log_write(level, ...) printf(__VA_ARGS__)
137#endif
138
139#ifdef __cplusplus
140}
141#endif
142
#define LOG_INFO(...)
for the curious
Definition log.h:110
@ LOG_NONE
Lowest log level, will output nothing.
Definition log.h:52
@ LOG_ALL
print everything
Definition log.h:63
#define LOG_DEBUG(...)
Print a log message, if LOG_LEVEL is defined to be at least LOG_DEBUG
Definition log.h:125
#define LOG_ERROR(...)
log an error
Definition log.h:108
#define LOG_WARNING(...)
log a warning
Definition log.h:109