So schneiden Sie Protokolle in Nginx
高洛峰
高洛峰 2017-05-16 17:29:36
0
5
559

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?

高洛峰
高洛峰

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

Antworte allen(5)
phpcn_u1582

确认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
刘奇

系统管理员的日志需求千变万化,Nginx为了自己的轻量,确实就不操心日志管理的事了。

官方的LogRotation Wiki页面

估计你也查到了,可以用自己的脚本或者logrotate。

我想大声告诉你

nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。

第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。

第二步向nginx主进程发送USR1信号。

nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。

重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。

工作进程立刻打开新的日志文件并关闭重名名的日志文件。

然后你就可以处理旧的日志文件了。

nginx日志按日期自动切割脚本如下

  • nginx日志切割脚本
  • author: http://www.nginx.cn
  • !/bin/bash
  • 设置日志文件存放目录

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

  • 设置pid文件

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

  • 重命名日志文件

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

  • 向nginx主进程发信号重新打开日志

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

世界只因有你

最简单的办法就是直接在配置文件中进行配置:

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;
Peter_Zhu

这个方法经常会生成不带日期的文件,已经弃用

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!