[PATCH] syslogd: let log-message timestamps include the year

Joshua Judson Rosen jrosen at harvestai.com
Tue May 20 16:35:50 UTC 2014


On 2014-05-20 03:23, walter harms wrote:
> just, an idea
> is it possible to make it more generic e.g. providing format string like
> "%Y-%m-%d %H:%M:%S" ? That would be more flexible.

Sure. I guess that requires adding a command-line option to specify it
at runtime; e.g.: "-t"? And perhaps some logic to validate the formatters
in the user-supplied string, and handle any invalid/unsupported ones
accordingly?

Another alternative would be, I suppose, to extend the syntax of syslog.conf--
though adding a command-line option seems somewhat more straightforward.


> Am 20.05.2014 07:06, schrieb Joshua Judson Rosen:
>> Configurable at build time.
>>
>> Signed-off-by: Joshua Judson Rosen <jrosen at harvestai.com>
>> ---
>>   sysklogd/Config.src |   11 +++++++++++
>>   sysklogd/syslogd.c  |   24 +++++++++++++++++-------
>>   2 files changed, 28 insertions(+), 7 deletions(-)
>>
>> diff --git a/sysklogd/Config.src b/sysklogd/Config.src
>> index fcf9930..4ca0c02 100644
>> --- a/sysklogd/Config.src
>> +++ b/sysklogd/Config.src
>> @@ -22,6 +22,17 @@ config SYSLOGD
>>   	  wrong. And something almost always will go wrong if
>>   	  you wait long enough....
>>
>> +config FEATURE_SYSLOG_TIMESTAMP_YEAR
>> +	bool "Include year in syslog timestamps"
>> +	default n
>> +	help
>> +	  Timestamps in system logs traditionally do not include
>> +	  the year, but this can be useful for some long-running
>> +	  systems where logs are checked infrequently.
>> +	  Note that this causes syslogd to always generate
>> +	  its own timestamps, overriding the timestamps
>> +	  generated by clients when they called syslog().
>> +
>>   config FEATURE_ROTATE_LOGFILE
>>   	bool "Rotate message files"
>>   	default y
>> diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
>> index f758510..d79f2fe 100644
>> --- a/sysklogd/syslogd.c
>> +++ b/sysklogd/syslogd.c
>> @@ -174,9 +174,9 @@ struct globals {
>>   	/* ...then copy to parsebuf, escaping control chars */
>>   	/* (can grow x2 max) */
>>   	char parsebuf[MAX_READ*2];
>> -	/* ...then sprintf into printbuf, adding timestamp (15 chars),
>> +	/* ...then sprintf into printbuf, adding timestamp (15 or 20 chars),
>>   	 * host (64), fac.prio (20) to the message */
>> -	/* (growth by: 15 + 64 + 20 + delims = ~110) */
>> +	/* (growth by: 20 + 64 + 20 + delims = ~115) */
>>   	char printbuf[MAX_READ*2 + 128];
>>   };
>>
>> @@ -701,17 +701,27 @@ static void timestamp_and_log(int pri, char *msg, int len)
>>
>>   	/* Jan 18 00:11:22 msg... */
>>   	/* 01234567890123456 */
>> -	if (len < 16 || msg[3] != ' ' || msg[6] != ' '
>> -	 || msg[9] != ':' || msg[12] != ':' || msg[15] != ' '
>> +	if (len >= 16 && msg[3] == ' ' && msg[6] == ' '
>> +	 && msg[9] == ':' && msg[12] == ':' && msg[15] == ' '
>>   	) {
>> -		time(&now);
>> -		timestamp = ctime(&now) + 4; /* skip day of week */
>> -	} else {
>>   		now = 0;
>>   		timestamp = msg;
>>   		msg += 16;
>>   	}
>> +#if !CONFIG_FEATURE_SYSLOG_TIMESTAMP_YEAR
>> +	else {
>> +#endif
>> +		time(&now);
>> +		timestamp = ctime(&now) + 4; /* skip day of week */
>> +#if !CONFIG_FEATURE_SYSLOG_TIMESTAMP_YEAR
>> +	}
>> +#endif
>> +
>> +#if CONFIG_FEATURE_SYSLOG_TIMESTAMP_YEAR
>> +	timestamp[20] = '\0';
>> +#else
>>   	timestamp[15] = '\0';
>> +#endif
>>
>>   	if (option_mask32 & OPT_kmsg) {
>>   		log_to_kmsg(pri, msg);
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
>

-- 
"'tis an ill wind that blows no minds."


More information about the busybox mailing list