下面是“详解Nginx日志配置及日志切割”的完整攻略:
1. 日志配置
1.1 日志配置文件
Nginx的日志配置文件位于nginx.conf
中,具体位置为http {}
块内。其中,日志的格式可以自己定义。默认格式如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
1.2 访问日志
配置访问日志需要在server {}
块内添加以下内容:
access_log /var/log/nginx/access.log main;
其中,/var/log/nginx/access.log
是日志文件的路径,main
是日志的格式。
1.3 错误日志
配置错误日志需要在http {}
块内添加以下内容:
error_log /var/log/nginx/error.log;
其中,/var/log/nginx/error.log
是日志文件的路径。
2. 日志切割
2.1 日志切割方案
日志切割是为了避免日志文件过大影响读写速度,一般有两种方案:
- 按照时间切割:根据时间周期将日志文件按时间切割,例如每天或每小时切割一个新日志文件。
- 按照大小切割:当日志文件到达一定大小后就会切割成新的日志文件。可以根据大小或者文件行数等条件进行切割。
2.2 日志切割实现
2.2.1 按照时间切割
以每天切割为例,创建一个crontab任务,每天凌晨将昨天的日志文件重命名:
0 0 * * * mv /var/log/nginx/access.log /var/log/nginx/access-$(date -d "yesterday" +"%Y-%m-%d").log
2.2.2 按照大小切割
以每达到100M就切割为例,在http {}
块内添加以下内容:
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log access buffer=32k;
# 定义日志切割规则,每达到100M就生成一个新日志文件
log_rotate_size 100M;
同时还需要安装logrotate
工具进行日志切割,通过命令sudo apt-get install logrotate
安装。在/etc/logrotate.d/
目录下创建一个日志切割的配置文件nginx
,输入以下内容:
/var/log/nginx/access.log {
rotate 7
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/etc/init.d/nginx reload > /dev/null
endscript
}
其中,rotate 7
表示最多保留7个旧日志文件,daily
表示按天切割,missingok
表示如果日志文件不存在不报错,notifempty
表示如果日志文件为空不切割,compress
表示压缩旧日志文件,delaycompress
表示延迟压缩旧日志文件,sharedscripts
表示在所有旧日志文件都压缩之后再执行postrotate
脚本,/etc/init.d/nginx reload > /dev/null
表示重新加载Nginx配置,使其立即生效。
2.3 示例说明
2.3.1 示例1:按照时间切割
假设现在是2022年10月1日,执行命令sudo crontab -e
,在打开的文件中添加以下内容:
0 0 * * * mv /var/log/nginx/access.log /var/log/nginx/access-$(date -d "yesterday" +"%Y-%m-%d").log
保存并退出文件,这样每天凌晨都会执行一次日志切割操作,例如到了2022年10月2日凌晨0点时,原来的/var/log/nginx/access.log
文件将被重命名为/var/log/nginx/access-2022-10-01.log
。
2.3.2 示例2:按照大小切割
在http {}
块内添加以下内容:
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log access buffer=32k;
# 定义日志切割规则,每达到100M就生成一个新日志文件
log_rotate_size 100M;
同时,在/etc/logrotate.d/
目录下创建一个日志切割的配置文件nginx
,输入以下内容:
/var/log/nginx/access.log {
rotate 7
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/etc/init.d/nginx reload > /dev/null
endscript
}
保存文件后,执行以下命令:
sudo /usr/sbin/logrotate -v /etc/logrotate.d/nginx
这样就会按照配置每达到100M就切割一个日志文件,最多保留7个旧日志文件,并且会在所有旧日志文件都压缩之后重新加载Nginx配置。
这就是“详解Nginx日志配置及日志切割”的完整攻略,希望能对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Nginx日志配置及日志切割 - Python技术站