一、设置日期变量

在nginx的http模块中添加变量

map $time_iso8601 $logdate {
    '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
    default 'date-not-found';
}

二、设置路径

在网站的sever配置中修改access_log地址,设置文件夹可写权限。

access_log  /www/xxxlogs/xxx.com/access-$logdate.log;
error_log  /www/xxxlogs/xxx.com/error.log;

注意:error.log的路径中无法添加变量,即使设置了变量也无法解析,原因如下。

对于 error_log 属性,官方手册的「error_log」上没提可以使用变量。

07/10/2019 Nginx error log won’t read variable – 不支持
07/10/2019 562 closed enhancement (invalid) – 不支持

根据官方的说法:
1)这是故意这个设计的。变量只在 HTTP 请求中可用,而 error_log 不限于HTTP请求。
2)错误日志是非常重要的。必须保证可用。例如,当解析 /path/$var/error.log 的 $var 变量出错(比如内存分配)时,应该在哪里记录错误日志呢?
3)可以考虑在非 main 块以外的上下文中支持变量。

最后修改:2024 年 11 月 20 日
如果觉得我的文章对你有用,请随意赞赏