syslog with timezone
Tomas Hulata
tomas.hulata at netbox.cz
Mon Jun 18 16:08:03 UTC 2018
According rfc5424 there could or should be time zone specified in syslog
message. There are problems for example with graylog, so my patch is
adding optional switch to enable different datetime formatting with
timezone support to syslog module.
# HG changeset patch
# User Tomas Hulata <tomas.hulata at netbox.cz>
# Date 1528838460 -7200
# Tue Jun 12 23:21:00 2018 +0200
# Node ID 309407bf691d77df2d095282b3050c3d9ad3c4ae
# Parent 8e6bb4e6045f7197923717831d2ddf414aa0f443
new option for timezone in syslog message
diff -r 8e6bb4e6045f -r 309407bf691d src/core/ngx_syslog.c
--- a/src/core/ngx_syslog.c Thu Jun 07 20:04:22 2018 +0300
+++ b/src/core/ngx_syslog.c Tue Jun 12 23:21:00 2018 +0200
@@ -211,6 +211,9 @@
} else if (len == 10 && ngx_strncmp(p, "nohostname", 10) == 0) {
peer->nohostname = 1;
+ } else if (len == 2 && ngx_strncmp(p, "tz", 2) == 0) {
+ peer->tz = 1;
+
} else {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"unknown syslog parameter \"%s\"", p);
@@ -238,11 +241,13 @@
pri = peer->facility * 8 + peer->severity;
if (peer->nohostname) {
- return ngx_sprintf(buf, "<%ui>%V %V: ", pri,
&ngx_cached_syslog_time,
+ return ngx_sprintf(buf, "<%ui>%V %V: ", pri,
+ peer->tz ? &ngx_cached_syslog_time_tz :
&ngx_cached_syslog_time,
&peer->tag);
}
- return ngx_sprintf(buf, "<%ui>%V %V %V: ", pri,
&ngx_cached_syslog_time,
+ return ngx_sprintf(buf, "<%ui>%V %V %V: ", pri,
+ peer->tz ? &ngx_cached_syslog_time_tz :
&ngx_cached_syslog_time,
&ngx_cycle->hostname, &peer->tag);
}
diff -r 8e6bb4e6045f -r 309407bf691d src/core/ngx_syslog.h
--- a/src/core/ngx_syslog.h Thu Jun 07 20:04:22 2018 +0300
+++ b/src/core/ngx_syslog.h Tue Jun 12 23:21:00 2018 +0200
@@ -17,6 +17,7 @@
ngx_connection_t conn;
unsigned busy:1;
unsigned nohostname:1;
+ unsigned tz:1;
} ngx_syslog_peer_t;
diff -r 8e6bb4e6045f -r 309407bf691d src/core/ngx_times.c
--- a/src/core/ngx_times.c Thu Jun 07 20:04:22 2018 +0300
+++ b/src/core/ngx_times.c Tue Jun 12 23:21:00 2018 +0200
@@ -33,6 +33,7 @@
volatile ngx_str_t ngx_cached_http_log_time;
volatile ngx_str_t ngx_cached_http_log_iso8601;
volatile ngx_str_t ngx_cached_syslog_time;
+volatile ngx_str_t ngx_cached_syslog_time_tz;
#if !(NGX_WIN32)
@@ -56,6 +57,9 @@
[sizeof("1970-09-28T12:00:00+06:00")];
static u_char cached_syslog_time[NGX_TIME_SLOTS]
[sizeof("Sep 28 12:00:00")];
+static u_char cached_syslog_time_tz[NGX_TIME_SLOTS]
+ [sizeof("1970-09-28T12:00:00+06:00")];
+
static char *week[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri",
"Sat" };
@@ -70,6 +74,7 @@
ngx_cached_http_log_time.len = sizeof("28/Sep/1970:12:00:00
+0600") - 1;
ngx_cached_http_log_iso8601.len =
sizeof("1970-09-28T12:00:00+06:00") - 1;
ngx_cached_syslog_time.len = sizeof("Sep 28 12:00:00") - 1;
+ ngx_cached_syslog_time_tz.len = sizeof("1970-09-28T12:00:00+06:00")
- 1;
ngx_cached_time = &cached_time[0];
@@ -80,7 +85,7 @@
void
ngx_time_update(void)
{
- u_char *p0, *p1, *p2, *p3, *p4;
+ u_char *p0, *p1, *p2, *p3, *p4, *p5;
ngx_tm_t tm, gmt;
time_t sec;
ngx_uint_t msec;
@@ -179,6 +184,15 @@
months[tm.ngx_tm_mon - 1], tm.ngx_tm_mday,
tm.ngx_tm_hour, tm.ngx_tm_min, tm.ngx_tm_sec);
+ p5 = &cached_syslog_time_tz[slot][0];
+
+ (void) ngx_sprintf(p5, "%4d-%02d-%02dT%02d:%02d:%02d%c%02i:%02i",
+ tm.ngx_tm_year, tm.ngx_tm_mon,
+ tm.ngx_tm_mday, tm.ngx_tm_hour,
+ tm.ngx_tm_min, tm.ngx_tm_sec,
+ tp->gmtoff < 0 ? '-' : '+',
+ ngx_abs(tp->gmtoff / 60), ngx_abs(tp->gmtoff % 60));
+
ngx_memory_barrier();
ngx_cached_time = tp;
@@ -187,6 +201,7 @@
ngx_cached_http_log_time.data = p2;
ngx_cached_http_log_iso8601.data = p3;
ngx_cached_syslog_time.data = p4;
+ ngx_cached_syslog_time_tz.data = p5;
ngx_unlock(&ngx_time_lock);
}
@@ -222,7 +237,7 @@
void
ngx_time_sigsafe_update(void)
{
- u_char *p, *p2;
+ u_char *p, *p2, *p3;
ngx_tm_t tm;
time_t sec;
ngx_time_t *tp;
@@ -268,10 +283,20 @@
months[tm.ngx_tm_mon - 1], tm.ngx_tm_mday,
tm.ngx_tm_hour, tm.ngx_tm_min, tm.ngx_tm_sec);
+ p3 = &cached_syslog_time_tz[slot][0];
+
+ (void) ngx_sprintf(p3, "%4d-%02d-%02dT%02d:%02d:%02d%c%02i:%02i",
+ tm.ngx_tm_year, tm.ngx_tm_mon,
+ tm.ngx_tm_mday, tm.ngx_tm_hour,
+ tm.ngx_tm_min, tm.ngx_tm_sec,
+ tp->gmtoff < 0 ? '-' : '+',
+ ngx_abs(tp->gmtoff / 60), ngx_abs(tp->gmtoff % 60));
+
ngx_memory_barrier();
ngx_cached_err_log_time.data = p;
ngx_cached_syslog_time.data = p2;
+ ngx_cached_syslog_time_tz.data = p3;
ngx_unlock(&ngx_time_lock);
}
diff -r 8e6bb4e6045f -r 309407bf691d src/core/ngx_times.h
--- a/src/core/ngx_times.h Thu Jun 07 20:04:22 2018 +0300
+++ b/src/core/ngx_times.h Tue Jun 12 23:21:00 2018 +0200
@@ -41,6 +41,7 @@
extern volatile ngx_str_t ngx_cached_http_log_time;
extern volatile ngx_str_t ngx_cached_http_log_iso8601;
extern volatile ngx_str_t ngx_cached_syslog_time;
+extern volatile ngx_str_t ngx_cached_syslog_time_tz;
/*
* milliseconds elapsed since some unspecified point in the past
--
S pozdravom
Tomas Hulata
/vedoucí úseku systemových inženýrů/
tel: +420 733 163 238
NETBOX
SMART Comp. a.s., Kubíčkova 8, 635 00, Brno
Tel./fax: +420 544 423 411, www.netbox.cz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20180618/3fc67942/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4185 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20180618/3fc67942/attachment-0001.bin>
More information about the nginx-devel
mailing list