前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx access log 按日期保存记录

Nginx access log 按日期保存记录

原创
作者头像
用户1349575
发布2022-03-18 12:22:10
3.8K0
发布2022-03-18 12:22:10
举报
文章被收录于专栏:编程社区编程社区

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

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

代码语言:javascript
复制
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 测试该方法可用

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

代码语言:javascript
复制
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方法捕获日期变量,不过本人没有试过,有兴趣的可以试试

代码语言:javascript
复制
if ($time_iso8601 ~ "^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})") {

}
 # 日期记录日志access_log  logs/$year$month$day-host.access.log;

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

先创建 .sh脚本

代码语言:javascript
复制
cd ~vi clearLogs.sh

添加内容

代码语言:javascript
复制
 #!/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:强制删除文件,包括目录; {} \; :固定写法,一对大括号+空格+\+;

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档