How to do log cutting in nginx
高洛峰
高洛峰 2017-05-16 17:29:36
0
5
612

Nginx logs are written in a file. I need one Nginx Log every day
I saw many methods on the Internet, all of which are to write scripts and cut Log files in a fixed format
Can't Nginx do log cutting by itself?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

reply all(5)
phpcn_u1582

Confirm cron is running

service crond status

Modify configuration file

vi /etc/crontab

Confirm scheduled tasks

vi /etc/cron.daily/logrotate

Write logrotate configuration file vi /etc/logrotate.d/nginx

/var/log/nginx/*.log {
        #指定转储周期为每天
        daily
        missingok
        #指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
        rotate 5
        #compress
        #delaycompress
        #如果是空文件的话,不转储
        notifempty
        #create 640 root adm
        sharedscripts
        postrotate
                [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
        endscript
}

Test configuration

/usr/sbin/logrotate -f /etc/logrotate.d/nginx
刘奇

The logging needs of system administrators are ever-changing. For the sake of its lightweight, Nginx really does not worry about log management.

Official LogRotation Wiki Page

I guess you have also found it, you can use your own script or logrotate.

我想大声告诉你

nginx log files do not have a rotate function. If you don't handle it, the log file will become larger and larger. Fortunately, we can write an nginx log cutting script to automatically cut the log file.

The first step is to rename the log file. You don’t have to worry about nginx not being able to find the log file and losing the log after renaming. Before you reopen the log file with the original name, nginx will still write logs to the file you renamed. Linux relies on file descriptors rather than file names to locate files.

The second step is to send the USR1 signal to the nginx main process.

After receiving the signal, the main process of nginx will read the log file name from the configuration file, reopen the log file (named with the log name in the configuration file), and use the user of the worker process as the owner of the log file.

After reopening the log file, the nginx main process will close the log file with the same name and notify the worker process to use the newly opened log file.

The worker process immediately opens new log files and closes log files with the same name.

Then you can process the old log files.

nginx log automatic cutting script by date is as follows

  • nginx log cutting script
  • author: http://www.nginx.cn
  • !/bin/bash
  • Set the log file storage directory

logs_path="/usr/local/nginx/logs/"

  • Set pid file

pid_path="/usr/local/nginx/nginx.pid"

  • Rename log file

mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log

  • Signal the nginx main process to reopen the log

kill -USR1 cat ${pid_path}

Save the above script nginx_log.sh, or click here to download

crontab setup job

0 0 * * * bash /usr/local/nginx/nginx_log.sh
This will rename the nginx log to date format at 0:00 every day, and regenerate today's new log file.

Detailed source reference: http://www.nginx.cn/255.html

世界只因有你

The easiest way is to configure it directly in the configuration file:

if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
    set $year ;
    set $month ;
    set $day ;
}
access_log  /home/wwwlogs/$year-$month-$day-bbs-access.log access;
Peter_Zhu

This method often generates files without dates and has been deprecated

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template