+#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)
+