Nginx 日志切割

举报
林欣 发表于 2025/04/26 21:37:51 2025/04/26
【摘要】 Nginx 默认不会自动切割日志文件,长期运行会导致日志文件过大,影响性能和可管理性。以下是几种常用的 Nginx 日志切割方法: 方法一:使用 logrotate(推荐)logrotate 是 Linux 系统自带的日志管理工具,可以方便地实现日志切割、压缩和删除。 1. 创建 logrotate 配置文件在 /etc/logrotate.d/ 目录下创建 nginx 文件:sudo na...

Nginx 默认不会自动切割日志文件,长期运行会导致日志文件过大,影响性能和可管理性。以下是几种常用的 Nginx 日志切割方法:

方法一:使用 logrotate(推荐)

logrotate 是 Linux 系统自带的日志管理工具,可以方便地实现日志切割、压缩和删除。

1. 创建 logrotate 配置文件

/etc/logrotate.d/ 目录下创建 nginx 文件:

sudo nano /etc/logrotate.d/nginx

添加以下内容(根据实际路径调整):

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}

参数说明:

  • daily: 每天切割日志
  • missingok: 如果日志文件不存在,忽略错误
  • rotate 14: 保留14天的日志文件
  • compress: 使用gzip压缩旧日志
  • delaycompress: 延迟压缩前一个日志文件(与compress配合使用)
  • notifempty: 如果日志为空,则不进行切割
  • create 0640 www-data adm: 创建新日志文件并设置权限和所有者
  • sharedscripts: 在所有日志文件处理后执行一次postrotate脚本
  • postrotate: 切割后通知Nginx重新打开日志文件

2. 测试配置

sudo logrotate -d /etc/logrotate.d/nginx  # 测试配置
sudo logrotate -f /etc/logrotate.d/nginx  # 强制执行切割

方法二:使用 cron 定时任务 + mv 命令

如果不想使用 logrotate,可以手动创建脚本:

1. 创建切割脚本

sudo nano /usr/local/bin/nginx_logrotate.sh

添加以下内容:

#!/bin/bash
LOG_PATH=/var/log/nginx
DATE=$(date +%Y%m%d)

# 切割访问日志
mv ${LOG_PATH}/access.log ${LOG_PATH}/access_${DATE}.log

# 切割错误日志
mv ${LOG_PATH}/error.log ${LOG_PATH}/error_${DATE}.log

# 通知Nginx重新打开日志文件
kill -USR1 $(cat /var/run/nginx.pid)

2. 设置可执行权限

sudo chmod +x /usr/local/bin/nginx_logrotate.sh

3. 添加定时任务

sudo crontab -e

添加以下内容(每天午夜执行):

0 0 * * * /usr/local/bin/nginx_logrotate.sh

方法三:使用 Nginx 模块

Nginx 有一个商业版模块 ngx_http_log_rotate_module 可以实现日志切割,但大多数情况下使用上述方法更为常见。

注意事项

  1. 权限问题:确保 Nginx 进程有权限写入新创建的日志文件
  2. 磁盘空间:定期检查日志文件是否被正确切割和删除
  3. 日志分析:如果使用日志分析工具,确保切割后工具能识别新日志文件
  4. 多实例:如果运行多个 Nginx 实例,需要为每个实例单独配置日志切割

日志文件命名建议

推荐的日志文件命名格式:

  • access_YYYYMMDD.log
  • error_YYYYMMDD.log

这样可以方便按日期排序和查找特定日期的日志。

通过以上方法,您可以有效地管理 Nginx 日志文件,避免单个日志文件过大带来的问题。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。