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?
phpcn_u15822017-05-16 17:31:36
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
怪我咯2017-05-16 17:31:36
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.
我想大声告诉你2017-05-16 17:31:36
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
logs_path="/usr/local/nginx/logs/"
pid_path="/usr/local/nginx/nginx.pid"
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").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
世界只因有你2017-05-16 17:31:36
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;
天蓬老师2017-05-16 17:31:36
This method often generates files without dates and has been deprecated