Introduce an optional logger_t.vlog() method with format string and arguments
[strongswan.git] / src / libcharon / bus / listeners / logger.h
1 /*
2 * Copyright (C) 2012 Tobias Brunner
3 * Hochschule fuer Technik Rapperswil
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16 /**
17 * @defgroup logger logger
18 * @{ @ingroup listeners
19 */
20
21 #ifndef LOGGER_H_
22 #define LOGGER_H_
23
24 typedef struct logger_t logger_t;
25
26 #include <bus/bus.h>
27
28 /**
29 * Logger interface, listens for log events on the bus.
30 *
31 * Calls to bus_t.log() are handled separately from calls to other functions.
32 * Logger functions may be called concurrently by multiple threads. Also
33 * recursive calls are not prevented, loggers that may cause recursive log
34 * messages are responsible to avoid infinite loops.
35 *
36 * Both the log() and the vlog() methods are optional to implement. With many
37 * loggers, using log() may be faster as printf() format substitution is done
38 * only once for all loggers.
39 */
40 struct logger_t {
41
42 /**
43 * Log a debugging message.
44 *
45 * @param group kind of the signal (up, down, rekeyed, ...)
46 * @param level verbosity level of the signal
47 * @param thread ID of the thread raised this signal
48 * @param ike_sa IKE_SA associated to the event
49 * @param message log message
50 */
51 void (*log)(logger_t *this, debug_t group, level_t level, int thread,
52 ike_sa_t *ike_sa, const char *message);
53
54 /**
55 * Log a debugging message with a format string.
56 *
57 * @note Calls to bus_t.log() are handled separately from calls to
58 * other functions. This callback may be called concurrently by
59 * multiple threads. Also recursive calls are not prevented, loggers that
60 * may cause recursive log messages are responsible to avoid infinite loops.
61 *
62 * @param group kind of the signal (up, down, rekeyed, ...)
63 * @param level verbosity level of the signal
64 * @param thread ID of the thread raised this signal
65 * @param ike_sa IKE_SA associated to the event
66 * @param fmt log message format string
67 * @param args variable arguments to format string
68 */
69 void (*vlog)(logger_t *this, debug_t group, level_t level, int thread,
70 ike_sa_t *ike_sa, const char *fmt, va_list args);
71
72 /**
73 * Get the desired log level for a debug group. This is called during
74 * registration.
75 *
76 * If the desired log levels have changed, re-register the logger with
77 * the bus.
78 *
79 * @param group debug group
80 * @return max level to log (0..4) or -1 for none (see debug.h)
81 */
82 level_t (*get_level)(logger_t *this, debug_t group);
83 };
84
85 #endif /** LOGGER_H_ @}*/