修改Nginx配置实现日志按天保存
第一种方案
修改配置
修改前
1 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' |
修改后
将$time_local
改成$time_iso8601
1 | log_format main '$remote_addr - $remote_user [$time_iso8601] "$request" ' |
然后在server 中添加以下代码
1 | if ($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})') { |
完整配置(参考)
1 | user root; |
重启Nginx
修改完保存退出,重启nginx 命令:./nginx -s reload
出错处理
如果error.log出现报错
1 | 2020/04/28 22:47:55 [crit] 7727#0: *32 open() "/usr/local/nginx/logs/2020-04-28.access.log" failed (13: Permission denied) while logging request, client: 192.168.175.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://192.168.175.171:8880/ssm/", host: "192.168.175.170:8888" |
这是因为当前用户没有权限open() “/usr/local/nginx/logs/2020-04-28.access.log” 可以使用chown
命令重新设置拥有者。
我这里文件的拥有者为root
所以nginx.conf
配置文件中设置成 user root;
也可以。
第二种方案
在nginx中加入以下配置。
1
2
3
4
5
6map $time_iso8601 $logdate {
'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
default 'nodate';
}
access_log logs/access-$logdate.log;加入位置如下所示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 日志样式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 按天保存文件
map $time_iso8601 $logdate {
'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
default 'date-not-found';
}
access_log /var/log/nginx/access.log main;
# 增加一个日志
access_log /var/log/nginx/access${logdate}.log main;
server {
...
}
}添加一个日志来做按天保存日志的原因是,nignx镜像做了重定向设置,将默认的日志输出到了stdout,所以无法直接保存日志文件,我的做法就是增加一个新的日志来保存。
加入之后保存
Esc :wq(保存命令)执行测试指令
保存之后,可以先去sbin目录下执行./nginx -t
,查看文件是否可用。修改logs文件夹的权限(改成自己的位置,我的是放在
/usr/local/nginx
下的):1
chmod -R 777 /usr/local/nginx/logs
完成之后重启nginx
1
nginx -s reload
然后访问应用即可查看按天生成的日志
参考链接:https://blog.csdn.net/weixin_43565319/article/details/105827924
参考链接:https://blog.csdn.net/weixin_45544011/article/details/125408227
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 竹山一叶!
评论