我按照AWS的说明为弹性beanstalk启用增强的运行状况监视。作为其中的一部分,我需要nginx输出一个日志文件到相应命名的/var/log/nginx/healthd
:application.log.YYYY.MM.DD.HH
.
由于某些原因,我的nginx不会创建这个文件。它能够在该文件夹中创建application.log
或aplication.log.1-2-3-4
,但不能创建application.log.YYYY.MM.DD.HH
。它只是没有出现。没有错误或任何东西
My nginx conf:
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
worker_rlimit_nofile 32634;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [[$time_local]] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format healthd '$msec"$uri"'
'$status"$request_time"$upstream_response_time"'
'$http_x_forwarded_for';
server {
listen 80;
if ($time_iso8601 ~ "^(d{4})-(d{2})-(d{2})T(d{2})") {
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
}
access_log /var/log/nginx/access.log main;
access_log /var/log/nginx/healthd/application.log healthd; #works!
access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd; #doesn't!
location / {
...
}
}
}
我以为这是日期的问题,但我已经用:
打印出来了location /temp {
return 200 "/var/log/nginx/healthd/application.log.$year-$month-$day-$hour";
}
并得到正确的字符串:/var/log/nginx/healthd/application.log.2021-01-29-15
.
是什么原因导致的?
这里描述了不直观(但正确)的答案,TLDR必须与nginx的这个属性有关:
在每次写日志时检查请求的根目录是否存在,如果不存在则不创建日志。
一旦你设置了nginx可以找到的根目录,一切都按预期工作。
感谢@Anton Drukh提供的链接。