Welcome! Log In Create A New Profile

Advanced

[PATCH] Add $time_iso8601 to logs.

Michael Lustfield
January 20, 2011 04:42AM
This is my first Nginx patch so feel free to yell at me. It's meant to take
care of a feature request in the Debian bug tracking system to add
$time_iso8601 as a variable in logs.

Index: trunk/src/core/ngx_times.c
===================================================================
--- trunk.orig/src/core/ngx_times.c
+++ trunk/src/core/ngx_times.c
@@ -27,6 +27,7 @@ volatile ngx_time_t *ngx_cached_time
volatile ngx_str_t ngx_cached_err_log_time;
volatile ngx_str_t ngx_cached_http_time;
volatile ngx_str_t ngx_cached_http_log_time;
+volatile ngx_str_t ngx_cached_http_log_iso8601;

#if !(NGX_WIN32)

@@ -46,6 +47,8 @@ static u_char cached_http_tim
[sizeof("Mon, 28 Sep 1970 06:00:00 GMT")];
static u_char cached_http_log_time[NGX_TIME_SLOTS]
[sizeof("28/Sep/1970:12:00:00 +0600")];
+static u_char cached_http_log_iso8601[NGX_TIME_SLOTS]
+ [sizeof("1970-09-28T00:00:00+06:00")];


static char *week[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
@@ -58,6 +61,7 @@ ngx_time_init(void)
ngx_cached_err_log_time.len = sizeof("1970/09/28 12:00:00") - 1;
ngx_cached_http_time.len = sizeof("Mon, 28 Sep 1970 06:00:00 GMT") - 1;
ngx_cached_http_log_time.len = sizeof("28/Sep/1970:12:00:00 +0600") - 1;
+ ngx_cached_http_log_iso8601.len = sizeof("1970-09-28T00:00:00+06:00") - 1;

ngx_cached_time = &cached_time[0];

@@ -68,7 +72,7 @@ ngx_time_init(void)
void
ngx_time_update(void)
{
- u_char *p0, *p1, *p2;
+ u_char *p0, *p1, *p2, *p3;
ngx_tm_t tm, gmt;
time_t sec;
ngx_uint_t msec;
@@ -152,6 +156,16 @@ ngx_time_update(void)
tp->gmtoff < 0 ? '-' : '+',
ngx_abs(tp->gmtoff / 60), ngx_abs(tp->gmtoff % 60));

+ p3 = &cached_http_log_iso8601[slot][0];
+
+ (void) ngx_sprintf(p3, "%4d-%02d-%02dT%02d%02d%02d%c%02d:%02d",
+ 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();

@@ -159,6 +173,7 @@ ngx_time_update(void)
ngx_cached_http_time.data = p0;
ngx_cached_err_log_time.data = p1;
ngx_cached_http_log_time.data = p2;
+ ngx_cached_http_log_iso8601.data = p3;

ngx_unlock(&ngx_time_lock);
}
Index: trunk/src/core/ngx_times.h
===================================================================
--- trunk.orig/src/core/ngx_times.h
+++ trunk/src/core/ngx_times.h
@@ -38,6 +38,7 @@ extern volatile ngx_time_t *ngx_cached_
extern volatile ngx_str_t ngx_cached_err_log_time;
extern volatile ngx_str_t ngx_cached_http_time;
extern volatile ngx_str_t ngx_cached_http_log_time;
+extern volatile ngx_str_t ngx_cached_http_log_iso8601;

/*
* milliseconds elapsed since epoch and truncated to ngx_msec_t,
Index: trunk/src/http/modules/ngx_http_log_module.c
===================================================================
--- trunk.orig/src/http/modules/ngx_http_log_module.c
+++ trunk/src/http/modules/ngx_http_log_module.c
@@ -83,6 +83,8 @@ static u_char *ngx_http_log_pipe(ngx_htt
ngx_http_log_op_t *op);
static u_char *ngx_http_log_time(ngx_http_request_t *r, u_char *buf,
ngx_http_log_op_t *op);
+static u_char *ngx_http_log_iso8601(ngx_http_request_t *r, u_char *buf,
+ ngx_http_log_op_t *op);
static u_char *ngx_http_log_msec(ngx_http_request_t *r, u_char *buf,
ngx_http_log_op_t *op);
static u_char *ngx_http_log_request_time(ngx_http_request_t *r, u_char *buf,
@@ -193,6 +195,8 @@ static ngx_http_log_var_t ngx_http_log_
{ ngx_string("pipe"), 1, ngx_http_log_pipe },
{ ngx_string("time_local"), sizeof("28/Sep/1970:12:00:00 +0600") - 1,
ngx_http_log_time },
+ { ngx_string("time_iso8601"), sizeof("1970-09-28T00:00:00+06:00") - 1,
+ ngx_http_log_iso8601 },
{ ngx_string("msec"), NGX_TIME_T_LEN + 4, ngx_http_log_msec },
{ ngx_string("request_time"), NGX_TIME_T_LEN + 4,
ngx_http_log_request_time },
@@ -510,6 +514,12 @@ ngx_http_log_time(ngx_http_request_t *r,
ngx_cached_http_log_time.len);
}

+static u_char *
+ngx_http_log_iso8601(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
+{
+ return ngx_cpymem(buf, ngx_cached_http_log_iso8601.data,
+ ngx_cached_http_log_iso8601.len);
+}

static u_char *
ngx_http_log_msec(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)


Thanks,
--
Michael Lustfield
Ubuntu Member


_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[PATCH] Add $time_iso8601 to logs.

Michael Lustfield 2536 January 20, 2011 04:42AM

Re: [PATCH] Add $time_iso8601 to logs.

Michael Lustfield 1074 January 20, 2011 11:36AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 247
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready