[PATCH] Variable $time_short.

Gena Makhomed gmm at csdoc.com
Sun May 30 10:02:24 UTC 2021


On 29.05.2021 0:55, Maxim Dounin wrote:

>> Main purpose of variable $time_short is usage for logging, access.log.
>>
>> Existing variables $time_iso8601 and $time_local has bad readability,
>> because these variables contains timezone after seconds and it has
>> no space between date and time fields.
>>
>> Compare readability:
>>
>> 27/May/2021:21:19:12 +0300
>> 27/May/2021:21:19:18 +0300
>> 27/May/2021:21:19:25 +0300
>> 27/May/2021:21:19:32 +0300
>> 27/May/2021:21:19:43 +0300
>>
>> 2021-05-27T21:19:12+03:00
>> 2021-05-27T21:19:18+03:00
>> 2021-05-27T21:19:25+03:00
>> 2021-05-27T21:19:32+03:00
>> 2021-05-27T21:19:43+03:00
>>
>> 2021/05/27 21:19:12
>> 2021/05/27 21:19:18
>> 2021/05/27 21:19:25
>> 2021/05/27 21:19:32
>> 2021/05/27 21:19:43
>>
>> But only proposed variable $time_short has excellent readability,
>> also this variable is very short, and contains no visual garbage.
> 
> Well, if you want to improve readability and don't need a timezone
> in your logs, something like this might work instead:
> 
>      map $time_iso8601 $time {
>          "~([0-9-]+)T([0-9:]+)" "$1 $2";
>          volatile;
>      }
> 
> I don't think that introducing additional builtin variables for
> additional data/time formats is a good idea.

Using map directive for creating $time variable indeed allow us
improve readability of log files, but this method is not cheap,
- regular expressions runs for every record in access.log file.

On busy servers (under DDoS attacks) can be hundreds of records
per second and this regexp in map directive will just eat CPU.

Human-readable variable $time / $time_short intended to use on
busy servers, under DDoS-attacks, with Load Average 60 and more.
See https://github.com/makhomed/autofilter for details about this.

 > I don't think that introducing additional builtin variables for
 > additional data/time formats is a good idea.

Why not?

Builtin variable ngx_cached_err_log_time already exists in nginx,
patch for ngx_http_log_module is very small, just few lines of code:

+    { ngx_string("time_short"), sizeof("1970/09/28 12:00:00") - 1,
+                          ngx_http_log_time_short },

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

-- 
Best regards,
  Gena


More information about the nginx-devel mailing list