Introduce an optional logger_t.vlog() method with format string and arguments
[strongswan.git] / src / libcharon / bus / listeners / logger.h
index 3b99e7d..d5432d3 100644 (file)
@@ -27,12 +27,33 @@ typedef struct logger_t logger_t;
 
 /**
  * Logger interface, listens for log events on the bus.
+ *
+ * Calls to bus_t.log() are handled separately from calls to other functions.
+ * Logger functions may be called concurrently by multiple threads. Also
+ * recursive calls are not prevented, loggers that may cause recursive log
+ * messages are responsible to avoid infinite loops.
+ *
+ * Both the log() and the vlog() methods are optional to implement. With many
+ * loggers, using log() may be faster as printf() format substitution is done
+ * only once for all loggers.
  */
 struct logger_t {
 
        /**
         * Log a debugging message.
         *
+        * @param group         kind of the signal (up, down, rekeyed, ...)
+        * @param level         verbosity level of the signal
+        * @param thread        ID of the thread raised this signal
+        * @param ike_sa        IKE_SA associated to the event
+        * @param message       log message
+        */
+       void (*log)(logger_t *this, debug_t group, level_t level, int thread,
+                               ike_sa_t *ike_sa, const char *message);
+
+       /**
+        * Log a debugging message with a format string.
+        *
         * @note Calls to bus_t.log() are handled separately from calls to
         * other functions.  This callback may be called concurrently by
         * multiple threads.  Also recursive calls are not prevented, loggers that
@@ -42,10 +63,11 @@ struct logger_t {
         * @param level         verbosity level of the signal
         * @param thread        ID of the thread raised this signal
         * @param ike_sa        IKE_SA associated to the event
-        * @param message       log message
+        * @param fmt           log message format string
+        * @param args          variable arguments to format string
         */
-       void (*log)(logger_t *this, debug_t group, level_t level, int thread,
-                               ike_sa_t *ike_sa, const char *message);
+       void (*vlog)(logger_t *this, debug_t group, level_t level, int thread,
+                                ike_sa_t *ike_sa, const char *fmt, va_list args);
 
        /**
         * Get the desired log level for a debug group.  This is called during