[process] Include process name in debug messages
[ipxe.git] / src / include / syslog.h
1 #ifndef _SYSLOG_H
2 #define _SYSLOG_H
3
4 /** @file
5 *
6 * System logger
7 *
8 */
9
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11
12 #include <stdarg.h>
13 #include <ipxe/ansiesc.h>
14 #include <config/console.h>
15
16 /**
17 * @defgroup syslogpri Syslog priorities
18 *
19 * These values are chosen to match those used in the syslog network
20 * protocol (RFC 5424).
21 *
22 * @{
23 */
24
25 /** Emergency: system is unusable */
26 #define LOG_EMERG 0
27
28 /** Alert: action must be taken immediately */
29 #define LOG_ALERT 1
30
31 /** Critical: critical conditions */
32 #define LOG_CRIT 2
33
34 /** Error: error conditions */
35 #define LOG_ERR 3
36
37 /** Warning: warning conditions */
38 #define LOG_WARNING 4
39
40 /** Notice: normal but significant conditions */
41 #define LOG_NOTICE 5
42
43 /** Informational: informational messages */
44 #define LOG_INFO 6
45
46 /** Debug: debug-level messages */
47 #define LOG_DEBUG 7
48
49 /** @} */
50
51 /** Do not log any messages */
52 #define LOG_NONE -1
53
54 /** Log all messages */
55 #define LOG_ALL LOG_DEBUG
56
57 extern void log_vprintf ( const char *fmt, va_list args );
58
59 extern void __attribute__ (( format ( printf, 1, 2 ) ))
60 log_printf ( const char *fmt, ... );
61
62 /** ANSI private escape sequence to set syslog priority
63 *
64 * @v priority Priority
65 */
66 #define SYSLOG_SET_PRIORITY( priority ) \
67 "\033[" #priority "p"
68
69 /** ANSI private escape sequence to clear syslog priority */
70 #define SYSLOG_CLEAR_PRIORITY "\033[p"
71
72 /**
73 * Write message to system log
74 *
75 * @v priority Message priority
76 * @v fmt Format string
77 * @v ... Arguments
78 */
79 #define vsyslog( priority, fmt, args ) do { \
80 if ( (priority) <= LOG_LEVEL ) { \
81 log_vprintf ( SYSLOG_SET_PRIORITY ( priority ) fmt \
82 SYSLOG_CLEAR_PRIORITY, (args) ); \
83 } \
84 } while ( 0 )
85
86 /**
87 * Write message to system log
88 *
89 * @v priority Message priority
90 * @v fmt Format string
91 * @v ... Arguments
92 */
93 #define syslog( priority, fmt, ... ) do { \
94 if ( (priority) <= LOG_LEVEL ) { \
95 log_printf ( SYSLOG_SET_PRIORITY ( priority ) fmt \
96 SYSLOG_CLEAR_PRIORITY, ##__VA_ARGS__ ); \
97 } \
98 } while ( 0 )
99
100 #endif /* _SYSLOG_H */