程序在运行的时候为了了解运行状态,会输出日志文件,时间久了日志文件会变得非常大,甚至达到GB级别。我在golang应用里使用logrus包来打日志,配置和使用都很方便,就是没有日志分割的功能,应用在线上运行一个月后日志文件都已经达到上百兆。后来发现了logrotate,这是centos自带的日志分割工具,都不用安装额外组件就能实现定时分割日志。

1.运行原理

logrotate默认情况下是通过anacron调用的,它每天只会被调用一次,也就是说一个日志文件默认不会多次被处理(除非-f强制调用或者文件大小超过指定值)。大致调用流程如下:

1).anacron每天去调用/etc/cron.daily中的任务(包含logrotate);

2).anacron调用logrotate后进行日志的处理工作;

3).如果logrotate被手工调用,或者配置文件中有引用,后面的配置记录会覆盖前面相同选项的内容;

1
2
3
4
5
6
7
8
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

可以看到入口配置文件是/etc/logrotate.conf,依次运行/etc/logrotate.conf.d里的配置文件 如果发现配置的logrotate没有执行,可以看下系统的crond服务有没有开启

logrotate命令详解:

1
2
3
4
5
6
7
8
9
10
logrotate --help
用法:logrotate [-dv] [-f|--force] [-s|--state file] config_file+
什么都不跟则显示版本信息和简单的帮助信息,如果处理过程中出现异常则返回非0的$?;
--?,--help:  显示帮助信息;
-v, --verbose:显示详细信息;
-d, --debug:开启调试模式并隐含开启-v,不会对日志和logrotate的state文件产生操作;
-f, --force:忽略调用周期强制调用logrotate,方便测试;
-m, --mail <command>:告知logrotate发送邮件的命令;
-s, --state <statefile>:多个logrotate运行时告知logrotate自己使用的state文件(/var/lib/logrotate.status)
config_file+:表示可以使用多个配置文件(默认为/etc/logrotate.conf)在后面,最好是在一个配置文件中进行引用(测试某条新的规则时可以单独创建一个配置文件并用-f参数进行强行调用);

2.配置

如果有安装nginx,可以参考nginx里的配置例子

1
2
3
4
5
6
7
8
9
10
11
12
/var/log/nginx/*log {
 create 0644 nginx nginx
 daily
 rotate 10
 missingok
 notifempty
 compress
 sharedscripts
 postrotate
  /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
 endscript
}

第一行定义的是日志文件的路径,可以用*通配,一般可以定义成*.log来匹配所有日志文件。也可以指定多个文件,用空格隔开,比如

1
2
3
/var/log/nginx/access.log /var/log/nginx/error.log {
   
}

花括号里面是日志切割相关的参数,下面是常用的切割参数

  1. compress 是否开启压缩,压缩格式gzip

  2. 不开启压缩

  3. compresscmd 自定义压缩命令

  4. compressexty 压缩文件名后缀

  5. compressoptions 压缩选项

  6. copy 复制一份文件

  7. create 后面跟mode owner group,设置新日志文件的权限

  8. daily 按天分割

  9. weekly 按周分割

  10. monthly 按月分割

  11. rotate 后面跟数字,表示需要保留的文件历史记录,超过数量就会删除,或者通过邮件发送

  12. size 后面跟文件大小,比如100k、100M,超过这个大小后分割

  13. missingok 忽略不存在的文件,不报错

  14. notifempty 不分割空文件

  15. sharedscripts 配合postrotate、prerotate,让他们只执行一次

  16. postrotate/endscript 文件分割完后,执行postrotate、endscript之间的命令

  17. prerotate/endscript 文件分割完前,执行prerotate、endscript之间的命令

下面看几个例子

1
2
3
4
5
6
7
8
9
/var/log/httpd/error.log {
 rotate 5
 mail i@wuyuans.com
 size=100k
 sharedscripts
 postrotate
  /sbin/killall -HUP httpd
 endscript
}

切割/var/log/httpd/error.log日志文件,超过100k后切割,保留最新的5个历史记录,超过5个的邮件发送到fss@qq.com,postrotate里的的命令是为了让httpd重新打开日志文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/var/lib/mysql/mysqld.log {
 # create 600 mysql mysql
 notifempty
 daily
 rotate 3
 missingok
 compress
 postrotate
 # just if mysqld is really running
 if test -x /usr/bin/mysqladmin && \
 /usr/bin/mysqladmin ping &>/dev/null
 then
 /usr/bin/mysqladmin --local flush-error-log \
    flush-engine-log flush-general-log flush-slow-log
 fi
 endscript
}

这是对mysql日志的切割,每天一份,忽略空文件,保留最新3份,使用gzip压缩

1
2
3
4
5
6
7
8
9
10
11
/home/wuyuan/log/*.log {
 su wuyuan wuyuan
 create 0777 wuyuan wuyuan
 daily
 rotate 10
 olddir /home/wuyuan/log/old
 missingok
 postrotate
 endscript
 nocompress
}

这是我在用的配置项,对log目录所有.log文件切割,每天一份,保留10份,新文件设定权限777,历史文件保留在old目录里,这样可以方便查看。因为应用程序用的logrus使用append的方式写日志,所以不需要重新打开日志文件,这点logrus做得很不错。

3.测试

写完配置文件后可以手动执行下,来验证是否可用。

1
logrotate -f /etc/logrotate.d/wuyuan

其中-f 表示强制执行

没问题的话日志就会被移到old目录下,并带上日期,之前的log文件会被清空

本文转自奔跑在路上博客51CTO博客,原文链接http://blog.51cto.com/qiangsh/1983415如需转载请自行联系原作者

qianghong000

Linux使用logrotate来切割日志文件相关推荐

  1. Linux下自动分割Nginx日志文件(三)-----Logrotate

    logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循).压缩以及删除旧的日志文件.例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月 ...

  2. 如何查看linux系统下的各种日志文件 linux 系统日志的分析大全

    如何查看linux系统下的各种日志文件 linux 系统日志的分析大全 日志分类: 1. 连接时间的日志 连接时间日志一般由/var/log/wtmp和/var/run/utmp这两个文件记录,不过这 ...

  3. linux生成日志文件,linux实现按天生成日志文件并自动清理

    linux实现按天生成日志文件并自动清理 前篇文章中讲到如何在Linux crontab创建每秒执行的方法,高人可能早意识到日志文件没做处理,假如没人工处理久了日后越来越大肯定会出现问题,当然人工处理 ...

  4. linux日志自动按天保存,linux实现按天生成日志文件并自动清理

    linux实现按天生成日志文件并自动清理 前篇文章中讲到如何在Linux crontab创建每秒执行的方法,高人可能早意识到日志文件没做处理,假如没人工处理久了日后越来越大肯定会出现问题,当然人工处理 ...

  5. Linux命令--more(查看日志文件内容,排查问题)

    原文网址:Linux命令--more(查看日志文件内容,排查问题)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Linux的more命令的用法. more命令适用于查看比较大的文件,例如:日 ...

  6. linux日志中显示skipping,linux推荐使用logrotate自动管理日志文件

    最近发现在 一般系统都自带了,如果没有就安装个,容易简单. yum install logrotate apt-get install logrotate 命令参数说明 # logrotate --h ...

  7. centos 日志切割_CentOS Linux使用logrotate分割管理日志

    logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用.可以节省磁盘空间. logrotate命令格式: logro ...

  8. 使用logrotate管理nginx日志文件

    本文转载自:http://linux008.blog.51cto.com/2837805/555829 描述:linux日志文件如果不定期清理,会填满整个磁盘.这样会很危险,因此日志管理是系统管理员日 ...

  9. logrotate管理nginx日志文件

    转自:http://linux008.blog.51cto.com/2837805/555829/ 描述:linux日志文件如果不定期清理,会填满整个磁盘.这样会很危险,因此日志管理是系统管理员日常工 ...

最新文章

  1. sd.js 2.0封装:更加简化请求传参内容
  2. RedisTemplate操作hash数据类型示例
  3. usbserials
  4. Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例
  5. java文件编译为class文件需要键入什么命令_cmd命令行 编译Java 文件
  6. 复用类库内部已有功能
  7. Nginx 安装 启动 停止 重启
  8. HG255D电信原版刷机实战整理,既HG255D刷uboot、Openwrt
  9. java项目相关架构图
  10. 包括淘宝天猫API明细接口
  11. 如何理解泊松分布(Poisson Distribution)
  12. 如何快捷修改eclipse黑色背景和字体颜色设置?
  13. 微信公众号授权 提示内容与下载文件不符,请检查文件内容或重新上传
  14. 最新wxid转扫一扫添加好友
  15. 三菱FX5U添加新模块
  16. 捷信Q1经营大幅下滑,净利润0.3亿元,不良率走高
  17. android studio 跳转后保留原页面数据_这些技巧和习惯,让你的原生 Android 手机更好用(上篇)...
  18. 调侃腾讯和360的小段子
  19. Python合并不同数量的Excel单元格
  20. android开发中对图片的处理方式汇总

热门文章

  1. SAP MM 物料主数据的Document Data
  2. SAP PM 入门系列14 – PM模块与其它模块的集成
  3. 吴恩达演讲直指AI落地三大挑战,并提出解决方案
  4. 「SAP技术」SAP MM 采购信息记录新价格不能体现在采购订单新的ITEM上?
  5. 2019年上半年收集到的人工智能卷积神经网络干货文章
  6. GAN在信息检索领域的应用
  7. 4句话让你明白什么是AI
  8. 牛顿法求解非线性方程的根
  9. Cell重磅:记忆研究的突破进展!在诺奖成果基础上,用“全光学”组合来“操纵记忆”...
  10. 【解析】工业机器人中的各类传感器技术应用