const char *cf_syslog_ident = NULL;
const char *cf_syslog_facility = NULL;
+enum LogLevel cf_syslog_level = LG_INFO;
+enum LogLevel cf_logfile_level = LG_NOISE;
+enum LogLevel cf_stderr_level = LG_NOISE;
+
/* optional function to fill prefix */
logging_prefix_fn_t logging_prefix_cb;
};
static const struct LevelInfo log_level_list[] = {
- { "FATAL", LOG_CRIT },
- { "ERROR", LOG_ERR },
- { "WARNING", LOG_WARNING },
- { "LOG", LOG_INFO },
- { "DEBUG", LOG_DEBUG },
- { "NOISE", LOG_DEBUG },
+ { "FATAL", LOG_CRIT }, /* LG_FATAL */
+ { "ERROR", LOG_ERR }, /* LG_ERROR */
+ { "WARNING", LOG_WARNING },/* LG_WARNING */
+ { "LOG", LOG_INFO }, /* LG_STATS*/
+ { "LOG", LOG_INFO }, /* LG_INFO */
+ { "DEBUG", LOG_DEBUG }, /* LG_DEBUG */
+ { "NOISE", LOG_DEBUG }, /* LG_NOISE */
};
struct FacName { const char *name; int code; };
}
}
- if (!cf_quiet)
+ if (!cf_quiet && level <= cf_stderr_level)
fprintf(stderr, "%s %u %s %s\n", timebuf, pid, lev->tag, msg);
- if (log_file)
+ if (log_file && level <= cf_logfile_level)
fprintf(log_file, "%s %u %s %s\n", timebuf, pid, lev->tag, msg);
- if (cf_syslog) {
+ if (cf_syslog && level <= cf_syslog_level) {
if (!syslog_started)
start_syslog();
syslog(lev->syslog_prio, "%s", msg);
LG_FATAL = 0,
LG_ERROR = 1,
LG_WARNING = 2,
- LG_INFO = 3,
- LG_DEBUG = 4,
- LG_NOISE = 5,
+ LG_STATS = 3,
+ LG_INFO = 4,
+ LG_DEBUG = 5,
+ LG_NOISE = 6,
};
#ifndef LOG_CONTEXT_DEF
/** Example: Prepare dummy context pointer */
/** Facility name */
extern const char *cf_syslog_facility;
+/** Max log level for syslog writer */
+extern enum LogLevel cf_syslog_level;
+/** Max log level for logfile writer */
+extern enum LogLevel cf_logfile_level;
+/** Max log level for stderr writer */
+extern enum LogLevel cf_stderr_level;
+
/*
* Internal API.
*/
log_generic(LG_WARNING, LOG_CONTEXT, fmt, ## args); \
} while (0)
+/** Log stats (liveness) message */
+#define log_stats(fmt, args...) do { LOG_CONTEXT_DEF; \
+ log_generic(LG_STATS, LOG_CONTEXT, fmt, ## args); \
+ } while (0)
+
/** Log info message */
#define log_info(fmt, args...) do { LOG_CONTEXT_DEF; \
log_generic(LG_INFO, LOG_CONTEXT, fmt, ## args); \