Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于tengine时间变量的问题 #1890

Open
xiahuan710 opened this issue Nov 11, 2023 · 6 comments
Open

关于tengine时间变量的问题 #1890

xiahuan710 opened this issue Nov 11, 2023 · 6 comments

Comments

@xiahuan710
Copy link

xiahuan710 commented Nov 11, 2023

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

@drawing
Copy link
Collaborator

drawing commented Nov 13, 2023

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

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

@xiahuan710
Copy link
Author

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;

@drawing
Copy link
Collaborator

drawing commented Nov 14, 2023

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

@xiahuan710
Copy link
Author

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

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

@drawing
Copy link
Collaborator

drawing commented Nov 15, 2023

@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 写日志比直接写文件要好,避免因为磁盘原因卡顿进程导致影响转发性能。

@xiahuan710
Copy link
Author

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants