首页 > 系统相关 >nginx 日志之 access_log分割

nginx 日志之 access_log分割

时间:2022-09-28 22:02:23浏览次数:55  
标签:bin log access nginx logrotate var 日志

如果任由访问日志写下去,日志文件会变得越来越大,甚至是写满磁盘。

所以,我们需要想办法把日志做切割,比如每天生成一个新的日志,旧的日志按规定时间删除即可。

实现日志切割可以通过写shell脚本或者系统的日志切割机制实现。

 

shell脚本切割Nginx日志

切割脚本内容:
#!/bin/bash
logdir=/var/log/nginx #定义日志路径
prefix=`date -d "-1 day" +%y%m%d` #定义切割后的日志前缀
cd $logdir
for f in `ls access.log`
do
mv $f $f-$prefix #把日志改名
done
/bin/kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid 2>/dev/null) 2>/dev/null #生成新的日志
bzip2 *$prefix #压缩日志
find . -type f -mtime +180 |xargs /bin/rm -f #删除超过180天的老日志

示例:

#!/bin/bash
logdir=/usr/local/nginx/logs/
prefix=`date -d "-1 day" +%y%m%d`
cd $logdir
for f in `ls access.log`
do
mv $f $prefix-$f
done
/bin/kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid 2>/dev/null) 2>/dev/null
find . -type f -mtime +180 |xargs /bin/rm

 

系统日志切割机制

在/etc/logrotate.d/下创建nginx文件,内容为:
/data/logs/access.log {
daily
rotate 30
missingok
notifempty
compress
sharedscripts
postrotate
/bin/kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid 2>/dev/null) 2>/dev/null || :
endscript
}

说明:
  nginx日志在/data/logs/目录下面,日志名字以log结尾
  daily表示每天切割
  rotate 30表示日志保留30天
  missingok表示忽略错误
  notifempty表示如果日志为空,不切割
  compress表示压缩
  sharedscripts和endscript中间可以引用系统的命令
  postrotate表示当切割之后要执行的命令

 附:

1.如何测试logrotate程序执行的情况

答:/usr/sbin/logrotate -d /etc/logrotate.d/nginx 

2.怎么查看log文件的具体执行情况

答:cat /var/lib/logrotate/status

3.使用-v或-d参数时,显示log does not need rotating

答:logrotate在对status未记录的文件进行转储时,会在status添加一条该文件的记录,并将操作时间设为当天。之后程序再次对此文件进行转储时发现这个文件今天已经操作过,就不再进行相关操作。

解决方法:

1. vi /var/lib/logrotate/status 更改相对应的文件操作日期

2. 使用-s指定状态文件

3.分割日志时报错:error: skipping "/var/log/nginx/test.access.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.

答:添加“su root list”到/etc/logrotate.d/nginx文件中即可

如下:

/var/log/nginx/*.log {

su root list

daily

missingok

rotate 52

compress

delaycompress

notifempty

#ifempty

create 0640 www-data adm

sharedscripts

postrotate

[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`

endscript

}



标签:bin,log,access,nginx,logrotate,var,日志
From: https://blog.51cto.com/u_472169/5721057

相关文章

  • [SWPU2019]EasiestRe-cnblog
    [SWPU2019]EasiestRe双进程保护,特殊的内存自修改,windows异常处理机制分析程序代码当int3+nop长度为5时,debugger传回了DBG_EXCEPTION_NOT_HANDLED(0x80010001)信号,告知......
  • nginx日志的python分析脚本
    因为容量场景需要统计峰值时间段的业务分布情况,即是统计每个接口请求以及对应的数量,这里记录下之前的实现脚本。nginx的日志格式如下: 代码如下:importos,jsonimport......
  • nginx lua 执行顺序
    不同阶段的顺序init>init_worker>set>rewrite>access>content>header>body>log同一个阶段下不同context执行优先级location>server>http......
  • nginx 学习
    nginx下载:https://nginx.org/en/download.html配置#在conf中打开nginx.conf文件,简单修改如下server{listen8080;#此处修改为8080,以防与系统......
  • AndroidStudio新版本Logcat
    我一直使用的是预览版的AndroidStudio,今天更新到2021.3.1Canary6,发现logcat变样子了。你瞧,现在是这个鸟样子了。嗯,就是这样子,外观到是好看多了,不过对于使用习惯的我......
  • 如何通过vs插件cnblogs console上传markdown笔记
    博客园如何通过vs插件cnblogsconsole上传markdown笔记1.安装插件安装插件前首先我们得有vscode软件,官方说明的是软件版本>=1.62.0,我之前已经安装过,所以不再说明下载位......
  • 4、linux环境下,使用VCS进行Verilog和C语言联编译
    `timescale1ns/1nsmoduletest;initialbegin$hello;//#10$stop;#10$finish;endendmodule/********************************************......
  • log4j漏洞复现
    ApacheLog4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。大多数情况下,开......
  • Mysql三种日志(binlog,redolog,undolog)的作用和区别
    Mysql有三种很重要的日志也是面试经常涉及到的考点,分别是binlog、redolog和undolog,这里面binlog是server层实现的日志,而redolog和undolog都是引擎层(innodb)实现的......
  • How To Hack a Tech Blog Site Need Login To Copy Code All In One
    HowToHackaTechBlogSiteNeedLoginToCopyCodeAllInOne如何破解技术博客网站需要登录才能复制代码AllInOneHTML5contenteditable="true"demo一键......