Nginx access log 按日期保存记录

$time_iso8601    生成格式:2013-09-25T15:16:35+08:00
$time_local          生成格式: 25/Sep/2013:15:12:13 +0800

 

网络流传的nginx access log分割都是写shell脚本然后做定时任务来分割日志,操作中自由度比较高,可以用正则按需要分割日志,但如果只是想按日期保存日志,可以用以下方法

server
{
   ……
   #从系统时间中正则匹配出年月日
   if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
      set $date $1$2$3;
   }
   
   # 日期记录日志
   access_log  logs/$date.host.access.log;
}

我的服务器 nginx version: nginx/1.14.1 测试该方法可用

更详细的日期变量设置,按需使用

if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})")
{
    set $year $1;
    set $month $2;
    set $day $3;
    set $hour $4;
    set $minutes $5;
    set $seconds $6;
}


据说还有Perl方法捕获日期变量,不过本人没有试过,有兴趣的可以试试

if ($time_iso8601 ~ "^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})") {}
 
# 日期记录日志
access_log  logs/$year$month$day-host.access.log;


配合定时任务删除n天前的日志

先创建 .sh脚本

cd ~
vi clearLogs.sh


添加内容

 #!/bin/bash
 
find /logs/ -mtime +10 -name "*.log" -exec rm -rf {} \;


说明:将/logs/目录下所有10天前带".log"的文件删除。
具体参数说明如下:
find:linux的查找命令,用户查找指定条件的文件;
/logs/:想要进行清理的任意目录;
-mtime:标准语句写法;
+10:查找10天前的文件,这里用数字代表天数;
"*.log":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三;
-exec:固定写法;
rm -rf:强制删除文件,包括目录;
{} \; :固定写法,一对大括号+空格+\+;

#执行命令
crontab -e
 
#添加代码每天凌晨1点定时执行脚本
00 01  * * * /root/clearLogs.sh


————————————————
版权声明:本文为CSDN博主「ArnoBM」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ArnoBM/article/details/89394887

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值