Nginx 配置中
在 Nginx 配置中,error_log 指令用于指定错误日志的文件路径及其日志级别。具体到你的配置行:
error_log /var/log/nginx/www.xxx.com_error.log warn;
这里的 “warn” 是指定的日志级别。理解 “warn” 与不指定日志级别的区别,需要先了解 Nginx 支持的日志级别及其优先级顺序:
debug: 调试信息,最详细的日志级别。info: 一般信息。notice: 正常但重要的情况。warn: 警告信息,表示潜在的问题。error: 错误信息,表示已经发生的问题。crit: 严重错误,系统可能无法继续运行。alert: 必须立即处理的问题。emerg: 紧急情况,系统不可用。
默认行为:
- 如果在 error_log 指令中没有指定日志级别,Nginx 默认使用 error 级别。这意味着只有 error 及其更高级别(crit、alert、emerg)的日志信息会被记录。
添加 “warn” 的影响:
- 当你指定 warn 级别时,Nginx 会记录 warn 及其更高级别(error、crit、alert、emerg)的日志信息。这意味着日志文件中会包含更多的信息,特别是那些可能导致问题但尚未严重到需要立即处理的警告信息。
总结区别:
配置 记录的日志级别 error_log /path/to/log error; error, crit, alert, emerg error_log /path/to/log warn; warn, error, crit, alert, emerg
实际影响:
- 有 “warn”: 日志文件会包含更多的细节,帮助你更早地发现潜在问题,从而进行预防性维护。
- 无 “warn”(默认 “error”): 日志文件相对简洁,只记录已经发生的错误及更严重的问题,适用于对日志量有严格控制的场景。
选择建议:
- 开发或测试环境: 使用较低的日志级别(如 warn 或 info)以便获取更多调试信息。
- 生产环境: 根据需求选择合适的日志级别。如果希望监控潜在问题,可以使用 warn;如果希望日志尽可能少,可以保持默认的 error。
自动分割轮转日志文件
由于 Nginx 不自带日志轮转功能,通常需要配置系统级别的工具来管理日志文件。最常用的工具是 logrotate。
使用logrotate管理Nginx日志
logrotate 是 Linux 系统中常用的日志管理工具,能够根据预设的策略自动轮转、压缩和删除旧的日志文件。
1. 安装 logrotate
大多数 Linux 发行版默认已安装 logrotate。如果未安装,可以使用以下命令进行安装:
Debian/Ubuntu:sudo apt-get updatesudo apt-get install logrotateCentOS/RHEL:sudo yum install logrotate
2. 配置 logrotate 为 Nginx
通常,Nginx 的 logrotate 配置文件位于 /etc/logrotate.d/nginx。如果不存在,可以创建一个。
示例配置 /etc/logrotate.d/nginx:
/var/log/nginx/*.log {daily # 每天轮转一次missingok # 如果日志文件缺失,不报错rotate 14 # 保留 14 个轮转周期的日志compress # 压缩旧的日志文件delaycompress # 延迟压缩,避免与 Nginx 写入冲突notifempty # 如果日志文件为空,则不轮转create 0640 www-data adm # 设置新日志文件的权限和所有者sharedscriptspostrotate[ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`endscript}
配置说明:
- daily:日志每天轮转一次。根据需要可以调整为 weekly(每周)或 monthly(每月)。
- rotate 14:保留 14 个轮转周期的日志文件,即大约两周的日志。
- compress 和 delaycompress:压缩旧的日志文件以节省空间,并延迟压缩以确保 Nginx 完全停止写入当前日志文件后再进行压缩。
- notifempty:如果日志文件为空,则不进行轮转。
- create 0640 www-data adm:创建新的日志文件时设置权限和所有者。根据你的系统配置,www-data 和 adm 可能需要调整。
- postrotate:在日志轮转后,向 Nginx 发送 USR1 信号,通知它重新打开日志文件。这确保了 Nginx 不会继续写入已轮转的旧日志文件。
3. 手动测试 logrotate 配置
在配置完成后,可以手动测试 logrotate 是否正常工作:
sudo logrotate -d /etc/logrotate.d/nginx
- -d:调试模式,不执行实际的轮转,只显示将要执行的操作。
如果配置正确且无误,可以执行实际的轮转:
sudo logrotate -f /etc/logrotate.d/nginx
- -f:强制执行轮转,即使不满足轮转条件。
其他日志轮转工具
除了 logrotate,还有其他工具可以用于日志管理,如:
- cronolog:基于时间或大小分割日志。
- logrotate 的替代品:如 newsyslog(在某些 BSD 系统中使用)。
基于日志大小的轮转
默认情况下,logrotate 主要基于时间(如每日、每周)进行轮转,但也可以配置基于日志文件的大小进行轮转。
示例:基于大小轮转
在 /etc/logrotate.d/nginx 中添加 size 选项:
/var/log/nginx/*.log {size 100M # 当日志文件达到 100MB 时轮转missingokrotate 14compressdelaycompressnotifemptycreate 0640 www-data admsharedscriptspostrotate[ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`endscript}
配置说明:
size 100M:当日志文件大小达到 100MB 时进行轮转。可以根据实际需求调整此值。 注意:
logrotate 可以同时使用基于时间和基于大小的轮转策略。例如,日志每天轮转一次,或者当日志文件达到 100MB 时轮转,以先满足其中之一的条件。
