-#define LOG_DISPATCH(level,file,line,func,format) \
- do { \
- va_list _ap; \
- bool written = false; \
- if (log_target == LOG_TARGET_KMSG) { \
- va_start(_ap, format); \
- written = write_to_kmsg(level, file, line, func, format, _ap) >= 0; \
- va_end(_ap); \
- } else if (log_target == LOG_TARGET_SYSLOG) { \
- va_start(_ap, format); \
- written = write_to_syslog(level, file, line, func, format, _ap) >= 0; \
- va_end(_ap); \
- } \
- if (!written) { \
- va_start(_ap, format); \
- write_to_console(level, file, line, func, format, _ap); \
- va_end(_ap); \
- } \
- } while (false)
-
-void log_meta(
+static int log_dispatch(
+ int level,
+ const char*file,
+ int line,
+ const char *func,
+ const char *buffer) {
+
+ int r;
+
+ if (log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
+ log_target == LOG_TARGET_SYSLOG) {
+
+ if ((r = write_to_syslog(level, file, line, func, buffer)) < 0) {
+ log_close_syslog();
+ log_open_kmsg();
+ } else if (r > 0)
+ return r;
+ }
+
+ if (log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
+ log_target == LOG_TARGET_KMSG) {
+
+ if ((r = write_to_kmsg(level, file, line, func, buffer)) < 0) {
+ log_close_kmsg();
+ log_open_console();
+ } else if (r > 0)
+ return r;
+ }
+
+ return write_to_console(level, file, line, func, buffer);
+}
+
+int log_meta(