[alibaba/tengine]关于tengine时间变量的问题

2024-01-16 240 views
8

tengine的时间变量 $year $month $day等,在定义 access_log error_log路径的时候,reload的时候,如果没有用户访问,直接输出变量一个带单引号的日志文件,例如'www.xxx.com-$year-$month-$day-error.log' ,随后有用户访问的时候显示正常。

日志目录结构如下

├── s2.123-$year-$month-$day-error.log ├── s2.123-2023-11-14-access.log ├── www.xxx.com-$year-$month-$day-error.log ├── www.xxx.com-$year-$month-$day-access.log ├── www.xxx.com-2023-11-11-access.log ├── www.xxx.com-2023-11-12-access.log ├── www.xxx.com-2023-11-13-access.log ├── www.xxx.com-2023-11-14-access.log ├── www.123-$year-$month-$day-error.log ├── www.123-$year-$month-$day-access.log ├── www.123-2023-11-11-access.log ├── www.123-2023-11-12-access.log ├── www.123-2023-11-13-access.log └── www.123-2023-11-14-access.log

回答

1

相关部分配置示例发一下?

3

access_log /var/log/nginx/www.xxxx.com-$year-$month-$day-access.log combined; error_log /var/log/nginx/www.xxxx.com-$year-$month-$day-error.log warn;

3

@xiahuan710 是用的哪个版本的 Tengine ?我用最新的 3.1.0 没有复现这个问题

6

我是在docker下用的tengine3.1.0,alpine下安装的tengine3.1.0,无用户访问的时候变量不生效直接输出变量,有用户访问的时候会输出正确的变量,一个带没有输出值的变量的日志文件和一个正常的日志同时存在,总结一点,就是必须要用户访问变量才会取值

0

确实 error_log 会有这个问题,error_log 并没有识别文件名中的变量,如果需要日志按日期切分日志可以用 cronolog,安装 cronolog 后,配置的例子:

error_log "pipe:/usr/sbin/cronolog /var/log/%Y/%m/%Y-%m-%d-error_log" warn;

通过 pipe 写日志比直接写文件要好,避免因为磁盘原因卡顿进程导致影响转发性能。

6

不仅仅是error会有这个问题,access也会有这个问题,当你reload的时候有用户访问就不会生成变量的日志格式,如果没用户访问的时候reload,同样会生成带无参数变量的access.log,这个应该是tengine的 一个bug