static char *log_file = NULL;
static int print_timestamp = 1;
+static int print_severity = 0;
static const char *config_keys[] =
{
"LogLevel",
"File",
- "Timestamp"
+ "Timestamp",
+ "PrintSeverity"
};
static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
static int logfile_config (const char *key, const char *value)
{
if (0 == strcasecmp (key, "LogLevel")) {
- if ((0 == strcasecmp (value, "emerg"))
- || (0 == strcasecmp (value, "alert"))
- || (0 == strcasecmp (value, "crit"))
- || (0 == strcasecmp (value, "err")))
- log_level = LOG_ERR;
- else if (0 == strcasecmp (value, "warning"))
- log_level = LOG_WARNING;
- else if (0 == strcasecmp (value, "notice"))
- log_level = LOG_NOTICE;
- else if (0 == strcasecmp (value, "info"))
- log_level = LOG_INFO;
-#if COLLECT_DEBUG
- else if (0 == strcasecmp (value, "debug"))
- log_level = LOG_DEBUG;
-#endif /* COLLECT_DEBUG */
- else
- return 1;
+ log_level = parse_log_severity(value);
+ if (log_level == -1) return 1; /* to keep previous behaviour */
}
else if (0 == strcasecmp (key, "File")) {
sfree (log_file);
log_file = strdup (value);
}
else if (0 == strcasecmp (key, "Timestamp")) {
- if ((strcasecmp (value, "false") == 0)
- || (strcasecmp (value, "no") == 0)
- || (strcasecmp (value, "off") == 0))
+ if (IS_FALSE (value))
print_timestamp = 0;
else
print_timestamp = 1;
+ } else if (0 == strcasecmp(key, "PrintSeverity")) {
+ if (IS_FALSE (value))
+ print_severity = 0;
+ else
+ print_severity = 1;
}
else {
return -1;
return 0;
} /* int logfile_config (const char *, const char *) */
-static void logfile_print (const char *msg, time_t timestamp_time)
+static void logfile_print (const char *msg, int severity,
+ cdtime_t timestamp_time)
{
FILE *fh;
int do_close = 0;
struct tm timestamp_tm;
char timestamp_str[64];
+ char level_str[16] = "";
+
+ if (print_severity)
+ {
+ switch (severity)
+ {
+ case LOG_ERR:
+ snprintf(level_str, sizeof (level_str), "[error] ");
+ break;
+ case LOG_WARNING:
+ snprintf(level_str, sizeof (level_str), "[warning] ");
+ break;
+ case LOG_NOTICE:
+ snprintf(level_str, sizeof (level_str), "[notice] ");
+ break;
+ case LOG_INFO:
+ snprintf(level_str, sizeof (level_str), "[info] ");
+ break;
+ case LOG_DEBUG:
+ snprintf(level_str, sizeof (level_str), "[debug] ");
+ break;
+ default:
+ break;
+ }
+ }
if (print_timestamp)
{
- localtime_r (×tamp_time, ×tamp_tm);
+ time_t tt = CDTIME_T_TO_TIME_T (timestamp_time);
+ localtime_r (&tt, ×tamp_tm);
strftime (timestamp_str, sizeof (timestamp_str), "%Y-%m-%d %H:%M:%S",
×tamp_tm);
else
{
if (print_timestamp)
- fprintf (fh, "[%s] %s\n", timestamp_str, msg);
+ fprintf (fh, "[%s] %s%s\n", timestamp_str, level_str, msg);
else
- fprintf (fh, "%s\n", msg);
+ fprintf (fh, "%s%s\n", level_str, msg);
if (do_close != 0)
fclose (fh);
return;
} /* void logfile_print */
-static void logfile_log (int severity, const char *msg)
+static void logfile_log (int severity, const char *msg,
+ user_data_t __attribute__((unused)) *user_data)
{
if (severity > log_level)
return;
- logfile_print (msg, time (NULL));
+ logfile_print (msg, severity, cdtime ());
} /* void logfile_log (int, const char *) */
-static int logfile_notification (const notification_t *n)
+static int logfile_notification (const notification_t *n,
+ user_data_t __attribute__((unused)) *user_data)
{
char buf[1024] = "";
char *buf_ptr = buf;
buf[sizeof (buf) - 1] = '\0';
- logfile_print (buf, n->time);
+ logfile_print (buf, LOG_INFO,
+ (n->time != 0) ? n->time : cdtime ());
return (0);
} /* int logfile_notification */
{
plugin_register_config ("logfile", logfile_config,
config_keys, config_keys_num);
- plugin_register_log ("logfile", logfile_log);
- plugin_register_notification ("logfile", logfile_notification);
+ plugin_register_log ("logfile", logfile_log, /* user_data = */ NULL);
+ plugin_register_notification ("logfile", logfile_notification,
+ /* user_data = */ NULL);
} /* void module_register (void) */
/* vim: set sw=4 ts=4 tw=78 noexpandtab : */