nginx日志分割

服务器长时间运行nginx日志文件会越来越大,导致查找和定位日志非常困难,此处将通过一系列方法对这个日志文件进行按天分割,方便排查日志定位问题

by
江江
on
2026/09/14
nginx日志分割
运维nginx

nignx默认日志规则

在nignx中日志默认保存在logs目录下,分别存在access.log和error.log,在没有特别设置的前提下,这两个文件是不断追加写入的,这会导致log文件特别大,如果要排查日志由于文件过大操作起来就很不方便,所以这里需要进行日志分割

操作过程

首先确认logrotate是否安装,可以使用logrotate命令看看效果,如果没有安装运行下面命令安装logrotate
yum install logrotate
安装完成后,编辑文件,如果 logrotate.d 目录不存在,则使用 mkdir 命令手动创建一下
vim  /etc/logrotate.d/nginx
编辑内容如下
# *.log日志路径和nginx.pid文件路径根据自己的实际情况配置
/usr/local/nginx/logs/*.log {
    daily                # 按天轮转
    missingok            # 日志不存在时不报错
    rotate 30
            # 保留30天
    dateext              # 启用日期后缀
    compress             # 压缩旧日志
    delaycompress        # 延迟压缩(保留最近一个未压缩)
    notifempty           # 空文件不轮转
        # create:指示 logrotate 在轮转(重命名/压缩)旧日志后,创建一个新的空日志文件。
    # 0640 表示:
                # 所有者(nginx 用户):读、写(6 = rw-)
                # 所属组(adm 组):读(4 = r--)
                # 其他人:无任何权限(0 = ---)
                # 即最终权限为 -rw-r-----
        # nginx:新文件的所有者(用户)。通常 Nginx 进程以 nginx 用户运行,这样进程才能写入该日志文件。
        # adm:新文件的所属组。adm 组在 Linux 中常用于系统日志管理,允许属于该组的用户(如管理员)读取日志。
    #create 0640 nginx adm
    create 0640 root adm
    sharedscripts
    postrotate
        # 重新打开日志文件,注意信号是 USR1 或 reopen
        [ -f /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    endscript
}
进行测试
sudo logrotate -d /etc/logrotate.d/nginx
运行
sudo logrotate -vf /etc/logrotate.d/nginx
 
江江江江于 2026-10-15 16:49:03 修改阅读 487评论 13点赞 2