1#ifndef NVIM_LOG_H
2#define NVIM_LOG_H
3
4#include <stdio.h>
5#include <stdbool.h>
6
7#include "auto/config.h"
8
9#define DEBUG_LOG_LEVEL 0
10#define INFO_LOG_LEVEL 1
11#define WARN_LOG_LEVEL 2
12#define ERROR_LOG_LEVEL 3
13
14#define DLOG(...)
15#define DLOGN(...)
16#define ILOG(...)
17#define ILOGN(...)
18#define WLOG(...)
19#define WLOGN(...)
20#define ELOG(...)
21#define ELOGN(...)
22
23#ifndef MIN_LOG_LEVEL
24# define MIN_LOG_LEVEL INFO_LOG_LEVEL
25#endif
26
27#define LOG(level, ...) logmsg((level), NULL, __func__, __LINE__, true, \
28 __VA_ARGS__)
29
30#if MIN_LOG_LEVEL <= DEBUG_LOG_LEVEL
31# undef DLOG
32# undef DLOGN
33# define DLOG(...) logmsg(DEBUG_LOG_LEVEL, NULL, __func__, __LINE__, true, \
34 __VA_ARGS__)
35# define DLOGN(...) logmsg(DEBUG_LOG_LEVEL, NULL, __func__, __LINE__, false, \
36 __VA_ARGS__)
37#endif
38
39#if MIN_LOG_LEVEL <= INFO_LOG_LEVEL
40# undef ILOG
41# undef ILOGN
42# define ILOG(...) logmsg(INFO_LOG_LEVEL, NULL, __func__, __LINE__, true, \
43 __VA_ARGS__)
44# define ILOGN(...) logmsg(INFO_LOG_LEVEL, NULL, __func__, __LINE__, false, \
45 __VA_ARGS__)
46#endif
47
48#if MIN_LOG_LEVEL <= WARN_LOG_LEVEL
49# undef WLOG
50# undef WLOGN
51# define WLOG(...) logmsg(WARN_LOG_LEVEL, NULL, __func__, __LINE__, true, \
52 __VA_ARGS__)
53# define WLOGN(...) logmsg(WARN_LOG_LEVEL, NULL, __func__, __LINE__, false, \
54 __VA_ARGS__)
55#endif
56
57#if MIN_LOG_LEVEL <= ERROR_LOG_LEVEL
58# undef ELOG
59# undef ELOGN
60# define ELOG(...) logmsg(ERROR_LOG_LEVEL, NULL, __func__, __LINE__, true, \
61 __VA_ARGS__)
62# define ELOGN(...) logmsg(ERROR_LOG_LEVEL, NULL, __func__, __LINE__, false, \
63 __VA_ARGS__)
64#endif
65
66#ifdef HAVE_EXECINFO_BACKTRACE
67# define LOG_CALLSTACK() log_callstack(__func__, __LINE__)
68# define LOG_CALLSTACK_TO_FILE(fp) log_callstack_to_file(fp, __func__, __LINE__)
69#endif
70
71#ifdef INCLUDE_GENERATED_DECLARATIONS
72# include "log.h.generated.h"
73#endif
74#endif // NVIM_LOG_H
75