peapod  0.1.0
EAPOL Proxy Daemon
log.h
Go to the documentation of this file.
1 /**
2  * @file log.h
3  * @brief Function prototypes for @p log.c, global logging macros.
4  */
5 #pragma once
6 
7 #include <errno.h>
8 #include <syslog.h>
9 
10 /**
11  * @name A new log level less severe/more verbose than LOG_DEBUG
12  * The syslog levels range from @p LOG_EMERG to @p LOG_DEBUG (0 to 7).
13  * Messages at this new level aren't even emitted to syslog.
14  * @{
15  */
16 #define LOG_DEBUGLOW 8
17 /** @} */
18 
19 /**
20  * @name Function-like stderr output macros
21  * Usage is like @p printf(3). Used during early program startup to print to
22  * @p stderr, before logging is even fully initialized.
23  * @p ceerr() adds @p strerror(errno) as the last argument,
24  * i.e. @code ceerr("Error %d: %s", errno); @endcode is equivalent to
25  * @code cerr("Error %d: %s", errno, strerror(errno)); @endcode
26  * @{
27  */
28 #define cerr(...) fprintf(stderr, __VA_ARGS__)
29 #define ceerr(...) cerr(__VA_ARGS__, strerror(errno))
30 /** @} */
31 
32 /**
33  * @name Function-like logging macros
34  * Usage is like @p printf(3).
35  * - Names range from @p emerg() for logging with level @p LOG_EMERG to @p debug
36  * for @p LOG_DEBUG in addition to @p debuglow() for our own @p LOG_DEBUGLOW.
37  * - The prefix '@p l' adds file and line number information to the message
38  * (however, those macros were only used during development).
39  * - The prefix '@p e' adds @p strerror(errno) as the last argument, i.e.
40  * @code eerr("Error %d: %s", errno); @endcode is equivalent to
41  * @code err("Error %d: %s", errno, strerror(errno)); @endcode
42  * - The suffix '@p die' also calls @p exit(3) with code @P EXIT_FAILURE.
43  * @{
44  */
45 #define emerg(...) log_msg(LOG_EMERG, NULL, 0, __VA_ARGS__)
46 #define alert(...) log_msg(LOG_ALERT, NULL, 0, __VA_ARGS__)
47 #define crit(...) log_msg(LOG_CRIT, NULL, 0, __VA_ARGS__)
48 #define err(...) log_msg(LOG_ERR, NULL, 0, __VA_ARGS__)
49 #define warning(...) log_msg(LOG_WARNING, NULL, 0, __VA_ARGS__)
50 #define notice(...) log_msg(LOG_NOTICE, NULL, 0, __VA_ARGS__)
51 #define info(...) log_msg(LOG_INFO, NULL, 0, __VA_ARGS__)
52 #define debug(...) log_msg(LOG_DEBUG, NULL, 0, __VA_ARGS__)
53 #define debuglow(...) log_msg(LOG_DEBUGLOW, NULL, 0, __VA_ARGS__)
54 
55 #define lemerg(...) log_msg(LOG_EMERG, __FILE__, __LINE__, __VA_ARGS__)
56 #define lalert(...) log_msg(LOG_ALERT, __FILE__, __LINE__, __VA_ARGS__)
57 #define lcrit(...) log_msg(LOG_CRIT, __FILE__, __LINE__, __VA_ARGS__)
58 #define lerr(...) log_msg(LOG_ERR, __FILE__, __LINE__, __VA_ARGS__)
59 #define lwarning(...) log_msg(LOG_WARNING, __FILE__, __LINE__, __VA_ARGS__)
60 #define lnotice(...) log_msg(LOG_NOTICE, __FILE__, __LINE__, __VA_ARGS__)
61 #define linfo(...) log_msg(LOG_INFO, __FILE__, __LINE__, __VA_ARGS__)
62 #define ldebug(...) log_msg(LOG_DEBUG, __FILE__, __LINE__, __VA_ARGS__)
63 
64 #define ecrit(...) crit(__VA_ARGS__, strerror(errno))
65 #define eerr(...) err(__VA_ARGS__, strerror(errno))
66 #define ewarning(...) warning(__VA_ARGS__, strerror(errno))
67 #define einfo(...) info(__VA_ARGS__, strerror(errno))
68 
69 #define critdie(...) do { crit(__VA_ARGS__); exit(EXIT_FAILURE); } while (0)
70 
71 #define ecritdie(...) do { ecrit(__VA_ARGS__); exit(EXIT_FAILURE); } while (0)
72 /** @} */
73 
74 int log_init(void);
75 int log_daemonize(void);
76 void log_msg(int level, const char *file, int line, const char *fmt, ...);
int log_daemonize(void)
Prepare logging when daemonizing.
Definition: log.c:127
void log_msg(int level, const char *file, int line, const char *fmt,...)
Log a message.
Definition: log.c:167
int log_init(void)
Initialize logging.
Definition: log.c:100