nginx 日志记录:有没有办法记录自 Unix 纪元以来以毫秒为单位的请求时间?

jam*_*esc 2 nginx log-files logging

我知道$mseclogging 参数以毫秒为单位将请求时间作为自 Unix 纪元以来的秒数。但是,它的格式包括一个句点“.”。例如'1407233265.472',这是我用来解析日志文件的导入函数的问题。

有没有办法(日志参数或插件)允许以总毫秒数记录请求时间?例如“1407233265472”。很高兴根据需要编译 nginx。

小智 5

有两种方法可以实现这一点。第一个很脏,我不会推荐它 - 但它是最快的方法:

if ($msec ~ "(.*)\.(.*)") {
    set $epoch_millis = "$1$2"
}
Run Code Online (Sandbox Code Playgroud)

这更干净,但需要lua:

set_by_lua_block $epoch_millis { return string.gsub(ngx.var.msec, "%.", "") }
Run Code Online (Sandbox Code Playgroud)

然后只需记录 $epoch_millis

  • nginx 用零填充小数点,因此不会发出多于/少于 3 个小数位的任何内容 (2认同)