关于tengine时间变量的问题

b1payxdu  于 4个月前  发布在  其他
关注(0)|答案(6)|浏览(40)

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

wh6knrhe

wh6knrhe1#

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

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

nuypyhwy

nuypyhwy2#

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

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

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;

6tdlim6h

6tdlim6h3#

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

1hdlvixo

1hdlvixo4#

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

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

oxcyiej7

oxcyiej75#

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

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

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

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

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

vsdwdz23

vsdwdz236#

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

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

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

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

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

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

相关问题