Heim > Fragen und Antworten > Hauptteil
Nginx-Protokolle werden in eine Datei geschrieben. Ich benötige jeden Tag ein Nginx-Protokoll
Ich habe im Internet viele Methoden gesehen, die alle darin bestehen, Skripte zu schreiben und Protokolldateien in ein festes Format zu schneiden
Kann Nginx das Holzschneiden nicht selbst durchführen?
phpcn_u15822017-05-16 17:31:36
确认cron在运行
service crond status
修改配置文件
vi /etc/crontab
确认定时任务
vi /etc/cron.daily/logrotate
编写logrotate配置文件 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 }
测试配置
/usr/sbin/logrotate -f /etc/logrotate.d/nginx
怪我咯2017-05-16 17:31:36
系统管理员的日志需求千变万化,Nginx为了自己的轻量,确实就不操心日志管理的事了。
官方的LogRotation Wiki页面
估计你也查到了,可以用自己的脚本或者logrotate。
我想大声告诉你2017-05-16 17:31:36
nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。
第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。
第二步向nginx主进程发送USR1信号。
nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。
重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。
工作进程立刻打开新的日志文件并关闭重名名的日志文件。
然后你就可以处理旧的日志文件了。
nginx日志按日期自动切割脚本如下
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}
保存以上脚本nginx_log.sh,或者点此下载
crontab 设置作业
0 0 * * * bash /usr/local/nginx/nginx_log.sh
这样就每天的0点0分把nginx日志重命名为日期格式,并重新生成今天的新日志文件。
详细出处参考:http://www.nginx.cn/255.html
世界只因有你2017-05-16 17:31:36
最简单的办法就是直接在配置文件中进行配置:
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
}
access_log /home/wwwlogs/$year-$month-$day-bbs-access.log access;