#include <stdarg.h>
#include <syslog.h>
+#ifdef DLOG_ENABLED
+#include <dlog.h>
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "MURPHY_COMMON"
+#define DLOG_TARGET "dlog_common"
+#endif
+
#include <murphy/common/mm.h>
#include <murphy/common/list.h>
#include <murphy/common/log.h>
static log_target_t stdout_target;
static log_target_t syslog_target;
static log_target_t file_target;
+#ifdef DLOG_ENABLED
+static log_target_t dlog_target;
+#endif
static MRP_LIST_HOOK(log_targets);
static int log_mask = MRP_LOG_MASK_ERROR;
}
+#ifdef DLOG_ENABLED
+static void log_msg_dlog(void *data, mrp_log_level_t level, const char *file,
+ int line, const char *func, const char *format,
+ va_list ap)
+{
+ va_list cp;
+ int prio;
+ char fbuf[1024];
+
+ MRP_UNUSED(data);
+
+ va_copy(cp, ap);
+ switch (level) {
+ case MRP_LOG_ERROR: prio = DLOG_ERROR; break;
+ case MRP_LOG_WARNING: prio = DLOG_WARN; break;
+ case MRP_LOG_INFO: prio = DLOG_INFO; break;
+ case MRP_LOG_DEBUG: prio = DLOG_DEBUG; break;
+ default: prio = DLOG_INFO;
+ }
+
+ snprintf(fbuf, sizeof(fbuf), "%s: %s(%d) > %s", file, func, line, format);
+ dlog_vprint(prio, LOG_TAG, fbuf, cp);
+
+ va_end(cp);
+}
+#endif
+
+
/*
* workaround for not being able to initialize log_fp to stderr
*/
file_target.data = NULL;
file_target.builtin = TRUE;
+#ifdef DLOG_ENABLED
+ mrp_list_init(&dlog_target.hook);
+ dlog_target.name = DLOG_TARGET;
+ dlog_target.logger = log_msg_dlog;
+ dlog_target.data = NULL;
+ dlog_target.builtin = TRUE;
+ mrp_list_prepend(&log_targets, &dlog_target.hook);
+#endif
+
mrp_list_prepend(&log_targets, &file_target.hook);
mrp_list_prepend(&log_targets, &syslog_target.hook);
mrp_list_prepend(&log_targets, &stderr_target.hook);
mrp_list_prepend(&log_targets, &stdout_target.hook);
+#ifdef DLOG_ENABLED
+ log_target = &dlog_target;
+#else
log_target = &stderr_target;
+#endif
}