3 G_DEFINE_INTERFACE (Logger, logger, G_TYPE_INVALID);
6 logger_logv_default (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap) __attribute__ ((format (printf, 3, 0)));
9 logger_default_init (LoggerInterface *iface)
11 iface->logv = &logger_logv_default;
15 logger_logprefix (Logger *self, gchar *buf, gulong buflen)
17 g_return_val_if_fail (IS_LOGGER (self), -1);
18 return LOGGER_GET_INTERFACE (self)->logprefix (self, buf, buflen);
22 logger_logv (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap)
24 g_return_if_fail (IS_LOGGER (self));
25 LOGGER_GET_INTERFACE (self)->logv (self, log_level, format, ap);
29 logger_logv_default (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap)
34 /* figure out how long the prefix is */
35 tmp = logger_logprefix (self, NULL, 0);
38 g_error ("failed to get log prefix");
42 /* print the prefix to a variable length array (to avoid malloc) */
44 tmp = logger_logprefix (self, pfx, sizeof(pfx));
47 g_error ("failed to get log prefix");
51 /* figure out how long the formatted message is */
52 va_copy (ap_copy, ap);
53 tmp = g_vsnprintf (NULL, 0, format, ap_copy);
57 g_error ("failed to format log message");
61 /* print the message to a variable length array (to avoid malloc) */
63 tmp = g_vsnprintf (msg, sizeof(msg), format, ap);
66 g_error ("failed to format log message");
70 /* log the message with the prefix */
71 g_log (G_LOG_DOMAIN, log_level, "%s%s", pfx, msg);
75 logger_log (Logger *self, GLogLevelFlags log_level, const gchar *format, ...)
78 va_start (ap, format);
79 logger_logv (self, log_level, format, ap);