From f0f7f5cda17991d16b42c8a1e925595115825d7f Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Fri, 26 Oct 2007 10:07:58 +0200 Subject: [PATCH] logfile plugin: Implemented an option to prefix logged lines with a timestamp. --- src/collectd.conf.pod | 4 ++++ src/logfile.c | 31 +++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index dc9d8bc0..ab31e01a 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -371,6 +371,10 @@ B can be used to write to the standard output and standard error channels, respectively. This, of course, only makes much sense when collectd is running in foreground- or non-daemon-mode. +=item B B|B + +Prefix all lines printed by the current time. Defaults to B. + =back =head2 Plugin C diff --git a/src/logfile.c b/src/logfile.c index 102f12b3..03c2f923 100644 --- a/src/logfile.c +++ b/src/logfile.c @@ -35,11 +35,13 @@ static int log_level = LOG_INFO; static pthread_mutex_t file_lock = PTHREAD_MUTEX_INITIALIZER; static char *log_file = NULL; +static int print_timestamp = 1; static const char *config_keys[] = { "LogLevel", - "File" + "File", + "Timestamp" }; static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); @@ -68,6 +70,14 @@ static int logfile_config (const char *key, const char *value) sfree (log_file); log_file = strdup (value); } + else if (0 == strcasecmp (key, "File")) { + if ((strcasecmp (value, "false") == 0) + || (strcasecmp (value, "no") == 0) + || (strcasecmp (value, "off") == 0)) + print_timestamp = 0; + else + print_timestamp = 1; + } else { return -1; } @@ -78,10 +88,23 @@ static void logfile_log (int severity, const char *msg) { FILE *fh; int do_close = 0; + time_t timestamp_time; + struct tm timestamp_tm; + char timestamp_str[64]; if (severity > log_level) return; + if (print_timestamp) + { + timestamp_time = time (NULL); + localtime_r (×tamp_time, ×tamp_tm); + + strftime (timestamp_str, sizeof (timestamp_str), "%Y-%m-%d %H:%M:%S", + ×tamp_tm); + timestamp_str[sizeof (timestamp_str) - 1] = '\0'; + } + pthread_mutex_lock (&file_lock); if ((log_file == NULL) || (strcasecmp (log_file, "stderr") == 0)) @@ -103,7 +126,11 @@ static void logfile_log (int severity, const char *msg) } else { - fprintf (fh, "%s\n", msg); + if (print_timestamp) + fprintf (fh, "[%s] %s\n", timestamp_str, msg); + else + fprintf (fh, "%s\n", msg); + if (do_close != 0) fclose (fh); } -- 2.30.2