Hi, I've seen the "ISODATE offset?" thread, and I seem to be seeing the exact same thing: https://lists.balabit.hu/pipermail/syslog-ng/2004-November/006633.html The problem appears only during Daylight Savings Time ("summer time"), not during standard/non-DST/"Winter" time. We just entered non-DST time this weekend (and hence the bug "stopped"). During DST the TZ offset does not include the offset due to DST. So TZ is off-by-one during DST. About this section #if HAVE_GLOBAL_TIMEZONE length = snprintf(dest, left - 1, "%c%02ld%02ld", timezone > 0 ? '-' : '+', (timezone < 0 ? -timezone : timezone) / 3600, (timezone % 3600) / 60); #else Bazsi writes in the thread:
Thanks. Either the value in timezone is not set properly, or it does not contain the daylight-saving offset, or my code has an error.
I'll check (I've checked DST before, and timezone should reflect it, so it _might_ be a problem in libc) I'll see what I can do.
Has there been any progress on this? After typing up this report I notice the 1.9.6 NEWS and see: "Fixes in local timezone detection, it should properly detect DSTs on Linux, Solaris and probably BSDs". Is this the same bug? Any chance of this fix being back-ported into a 1.6 maintenance release to show up automagically in debian? (There are no TZ environment variables set on this machine. Also what should it be set to? Following GNUs docs doesn't help. See below.) ************ environment *************
cat /etc/timezone Europe/Copenhagen ls -l /etc/localtime lrwxrwxrwx 1 root root 37 2005-10-25 07:13 /etc/localtime -> /usr/share/zoneinfo/Europe/Copenhagen syslog-ng 1.6.8-1 set | grep -i TZ (no output - se below under "Tried setting TZ env") # I'm using 1.6.8-1 on debian (==newest in testing+unstable), # and the poster in the thread from Nov 2004 was using 1.6.4-1. dpkg-query -W 'syslog-ng' dpkg-query -W libc6 libc6 2.3.5-6
************ syslog-ng.conf snippet ************* destination d_template { file("/tmp/syslog-template.log" template("\"DATE'$ISODATE'TZOFFSET'$TZOFFSET'FULLDATE'$FULLDATE'MSG'$MSG\n") template_escape(yes)); }; log { source(s_all); destination(d_template); }; ************ non-DST example - works ************ # date, perl and syslog-ng all agree with the truth that # we're +0100 during "wintertime" - non-DST.
date --rfc-2822 Mon, 31 Oct 2005 00:00:06 +0100 perl -le 'use POSIX; print strftime ("%a, %d %b %Y %H:%M:%S %z", localtime);' Mon, 31 Oct 2005 00:00:08 +0100 logger 'A message' sudo tail /tmp/syslog-template.log | grep 'A message' "DATE'2005-10-31T00:00:11+0100'TZOFFSET'+0100'FULLDATE'2005 Oct 31 00:00:11'MSG'pvm: A message
************ DST example - fails ************ # Date and perl agree with the truth that # we're +0200 during "summertime" - dst.
date --rfc-2822 Tue, 25 Oct 2005 00:14:13 +0200 perl -le 'use POSIX; print strftime ("%a, %d %b %Y %H:%M:%S %z", localtime);' Tue, 25 Oct 2005 00:14:15 +0200 # syslog-ng seems to think we're +0100 logger 'A message' sudo tail /tmp/syslog-template.log | grep 'A message' "DATE'2005-10-25T00:14:17+0100'TZOFFSET'+0100'FULLDATE'2005 Oct 25 00:14:17'MSG'pvm: A message
*********** Tried setting TZ env **************** I tried setting the TZ environment variable as pr. http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html And notice that perl (or rather the POSIX implementation of strftime()) adheres to it:
TZ=:/usr/share/zoneinfo/Asia/Tokyo perl -le 'use POSIX; print strftime ("%a, %d %b %Y %H:%M:%S %z", localtime);' Tue, 25 Oct 2005 07:03:32 +0900 TZ=:/usr/share/zoneinfo/Europe/Copenhagen perl -le 'use POSIX; print strftime ("%a, %d %b %Y %H:%M:%S %z", localtime);' Tue, 25 Oct 2005 00:03:39 +0200
Using Asia/Tokyo or Europe/Copenhagen does affect syslog-ng, but it still has a offset-by-one error during DST! # Not my real timezone # export TZ=:/usr/share/zoneinfo/Asia/Tokyo # /etc/init.d/syslog-ng restart # logger 'A message' # tail /tmp/syslog-template.log | grep 'A message' "DATE'2005-10-25T07:06:14+0900'TZOFFSET'+0900'FULLDATE'2005 Oct 25 07:06:14'MSG'pvm: A message # My real timezone - should be +0200 on oct 25 in # Copenhagen as strftime also knows. # # export TZ=:/usr/share/zoneinfo/Europe/Copenhagen # /etc/init.d/syslog-ng restart # logger 'A message' # tail /tmp/syslog-template.log | grep 'A message' "DATE'2005-10-25T00:06:57+0100'TZOFFSET'+0100'FULLDATE'2005 Oct 25 00:06:57'MSG'pvm: A message -- Peter Valdemar Mørch http://www.morch.com