nginx日志自动按天分隔

log4j可以的DailyRollingFileAppender可以实现日志按天归档,避免日志过大。同时也方便按天查询统计日志。但是nginx没有实现这个功能,所有的日志都是一个文件死磕到底。像error_log还好,但是access_log一般都比较大,按天归档是很有必要的,怎样实现呢?

可以这样简单处理:

写一个脚本: nginx_log_split.sh

#!/bin/bash

cd /home/work/nginx
log_dir="/home/work/nginx/logs"
time=`date +%Y%m%d`
nginx_dir="/home/work/nginx"

for logfile in `ls -l $log_dir |  grep -v "^d" | awk '{print $9}' | grep ".log$" | grep -v "[_-]\{1\}[0-9]\{8\}.log"` ;do
    mv $log_dir/$logfile $log_dir/${logfile%.*}_$time.log
done;

$nginx_dir/sbin/nginx -s reload

NOTE

注意,这里使用的是ls -l而不是ll,虽然ll一般都是ls -l的alias,但是alias是跟登陆的shell绑定的,new出来的shell是不会继承的。所以不能用别名。否则会报错。

这个文件会找出 /home/work/nginx/logs 下的所有日志文件,重新命名为 xxx_{YYYYMMDD}.log文件。然后让nginx重新加载配置文件以写到新的文件。

然后配置一个crontab,让它在接近夜晚0点的时候执行:

$ crontab -l

59 23 * * * sleep 56;sh /home/work/userbin/nginx_log_split.sh >/dev/null 2>&1

由于crontab的最小调度粒度是分,所以这里先sleep了56s,再执行这个nginx_log_split脚本。

转自:http://blog.arganzheng.me/posts/nginx-log-daily-rolling.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值