I would like to add “json” option for additional escape for backslash
character. So it will be:
access_log path format json;
The initial patch for 1.6.2 looks like:
— ./src/http/modules/ngx_http_log_module.c.orig
+++ ./src/http/modules/ngx_http_log_module.c
@@ -67,6 +67,7 @@
time_t disk_full_time;
time_t error_log_time;
ngx_http_log_fmt_t *format;
- ngx_uint_t json;
} ngx_http_log_t;
@@ -881,7 +882,7 @@
value->escape = len ? 1 : 0;
- return value->len + len * 3;
- return value->len + len * 4;
}
@@ -951,6 +952,7 @@
while (size) {
if (escape[*src >> 5] & (1 << (*src & 0x1f))) {
*dst++ = ‘\’;
-
*dst++ = '\\'; *dst++ = 'x'; *dst++ = hex[*src >> 4]; *dst++ = hex[*src & 0xf];
@@ -1068,6 +1070,7 @@
log->script = NULL;
log->disk_full_time = 0;
log->error_log_time = 0;
-
log->json = 0;
lmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_log_module);
fmt = lmcf->formats.elts;
@@ -1087,6 +1090,7 @@ssize_t size;
ngx_int_t gzip; -
ngx_int_t json;
ngx_uint_t i, n;
ngx_msec_t flush;
ngx_str_t *value, name, s;
@@ -1189,6 +1193,7 @@
size = 0;
flush = 0;
gzip = 0; -
json = 0;
for (i = 3; i < cf->args->nelts; i++) {
@@ -1255,6 +1260,16 @@
#endif
}
-
if (ngx_strncmp(value[i].data, "json", 4) == 0)
-
{
-
s.len = value[i].len - 5;
-
s.data = value[i].data + 5;
-
json = 1;
-
continue;
-
}
-
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid parameter \"%V\"", &value[i]); return NGX_CONF_ERROR;
@@ -1267,6 +1282,10 @@
return NGX_CONF_ERROR;
}
-
if (json) {
-
log->json = 1;
-
}
-
if (size) {
if (log->script) {
But I can’t figure out how can I pass the json variable directly to the
functions:
- ngx_http_log_variable_getlen
and - ngx_http_log_variable
Can someone give me suggestions?
Posted at Nginx Forum: