1. 编写配置文件,内容如下(以 Amadeus 系统为例):

编写配置文件,放在 /etc/logrotate.d/xxxx 下,其中 xxxx 是自己取的名字,无需后缀。例如 Amadeus 系统中此文件是 /etc/logrotate.d/amadeus

/usr/local/tomcat_amadeus/logs/catalina.out {
copytruncate
daily
dateext
rotate 15
compress
missingok
size 2000M
}

第一行是文件的全路径,大括号中的重要字段解释如下:

copytruncate 使用先拷贝文件再 truncate 原文件的方法来轮转,这种方法无需停应用,也不会有数据丢失。
daily 按天执行
dateext 轮转后的日志备份加上日期后缀
rotate 15 总共保留 15 份备份文件
compress 开启gzip压缩,能大幅减少日志备份的尺寸
missingok 日志文件不存在的时候不会报错(如果有多个配置,会继续执行)
size 2000M 只有文件大于 2000M 时才轮转

配置项的详细解释可以参考 man logrotate。

2. 设置 crontab 任务

logrotate 程序默认是作为系统全局的 daily 任务执行的,按理来说只需要编写好了配置文件就会自动执行。但我发现这样会有不工作的情况,因此显示地多配置了一个 crontab 任务来执行它,如下:

00 00 * * * /usr/sbin/logrotate -v /etc/logrotate.d/amadeus >> /home/jerry/logrotate.log 2>&1

将参数部分的配置文件路径替换成你自己的配置文件即可。要注意的是必须确保运行 crontab 的用户对日志文件及所在的目录有读写权限。建议直接使用运行 Tomcat 时的用户。

添加 crontab 的方法是使用对应的用户登录系统,执行 crontab -e,按上面的方式添加一行即可。

3. 查看,搜索日志备份

启用 logrotate 后的效果:

[jerry@xxxxxxxx logs]$ ls -lh catalina.out*
-rw-r--r--. 1 jerry xxxxxxxx 2.2G Jan 14 14:52 catalina.out
-rw-r--r--. 1 jerry xxxxxxxx 93M Dec 30 00:00 catalina.out-20131230.gz
-rw-r--r--. 1 jerry xxxxxxxx 83M Dec 31 00:00 catalina.out-20131231.gz
-rw-r--r--. 1 jerry xxxxxxxx 110M Jan 1 00:00 catalina.out-20140101.gz
-rw-r--r--. 1 jerry xxxxxxxx 165M Jan 3 00:01 catalina.out-20140103.gz
-rw-r--r--. 1 jerry xxxxxxxx 111M Jan 4 00:01 catalina.out-20140104.gz
-rw-r--r--. 1 jerry xxxxxxxx 110M Jan 5 00:00 catalina.out-20140105.gz
-rw-r--r--. 1 jerry xxxxxxxx 106M Jan 6 00:00 catalina.out-20140106.gz
-rw-r--r--. 1 jerry xxxxxxxx 167M Jan 7 00:01 catalina.out-20140107.gz
-rw-r--r--. 1 jerry xxxxxxxx 208M Jan 8 00:01 catalina.out-20140108.gz
-rw-r--r--. 1 jerry xxxxxxxx 170M Jan 9 00:01 catalina.out-20140109.gz
-rw-r--r--. 1 jerry xxxxxxxx 194M Jan 10 00:01 catalina.out-20140110.gz
-rw-r--r--. 1 jerry xxxxxxxx 172M Jan 11 00:01 catalina.out-20140111.gz
-rw-r--r--. 1 jerry xxxxxxxx 119M Jan 12 00:00 catalina.out-20140112.gz
-rw-r--r--. 1 jerry xxxxxxxx 145M Jan 13 00:01 catalina.out-20140113.gz
-rw-r--r--. 1 jerry xxxxxxxx 181M Jan 14 00:01 catalina.out-20140114.gz

可以看到,启用了压缩后,每天几个G的日志占用的空间减少到只有100多M。

按这个配置,备份的日志文件都是被压缩过的,会带有 gz 扩展名。当需要查询、查看这些文件的时候,可以使用以下方法:

1. 查看:使用 zless
2. 查找字符串:使用 zgrep
3. 显示内容:使用 zcat
4. 还原文件:gunzip xxxx.gz

一般情况不建议用 gunzip 解压开,而是直接使用 zless,zcat 等工具。例如要从旧日志里 grep 一个关键字并做处理,可以这么做:

zgrep Exception catalina.out-20131230.gz

或者

zcat catalina.out-20131230.gz | grep Exception

使用 Linux 自带的 logrotate 程序来控制日志文件尺寸的更多相关文章

  1. 用 Linux自带的logrotate 来管理日志

    大家可能都有管理日志的需要,比如定时压缩日志,或者当日志超过一定大小时就自动分裂成两个文件等.最近就接到这样一个小任务.我们的程序用的是C语言,用log4cpp的library来实现日志记录.但是问题 ...

  2. Linux自带神器logrotate详解

    Linux自带神器logrotate详解 散尽浮华 运维 3天前   作者:散尽浮华 链接:https://www.cnblogs.com/kevingrace/p/6307298.html 对于 L ...

  3. 利用Linux自带的logrotate管理日志

    日常运维中,经常要对各类日志进行管理,清理,监控,尤其是因为应用bug,在1小时内就能写几十个G日志,导致磁盘爆满,系统挂掉. nohup.out,access.log,catalina.out 本文 ...

  4. 用Linux自带的Logrotate来管理日志

    Logrotate是由cron控制,cron在规定的时间执行 " logrotate  /etc/logrotate.conf "命令.将对象日志进行转储,删除,压缩等操作... ...

  5. Linux环境下使用logrotate工具实现nginx日志切割

    一. 前提背景及需求 nginx运行日志默认保存在nginx安装目录下的 /usr/local/nginx/logs 文件夹, 包含access.log和error.log两个文件. (1) acce ...

  6. Linux下Shell脚本运行程序不输出日志到终端

    使用: 脚本路径/脚本名 >/dev/>& 说明: 可以简单的理解/dev/null是Linux下的回收站 >默认是把标准输出重定向 2>&1是把出错输出也定向 ...

  7. linux之使用cron,logrotate管理日志文件

    1) logrotate配置   logrotate 程序是一个日志文件管理工具.用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”.   我们可以根据日志文件的大小,也可以根据其天数来 ...

  8. 不错的linux下通用的java程序启动脚本

    不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...

  9. Linux如何实现开机启动程序详解

    我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤. 加载内核LILO 启动之 ...

随机推荐

  1. 使用GO开发ChainCode

    本来不会GO,最近突击学了些GO的基础,就开始搞chaincode了. 首先给大家推荐一个非常好的Hyperldeger Fabric项目 marble:https://github.com/ibm- ...

  2. 20172306《Java程序设计与数据结构》第一周总结

    20172306<Java程序设计>第一周学习总结 教材学习内容总结 本周主要学习<Android和Java>书中的第二十三章和第二十六章. 第二十三章:Android简介 A ...

  3. Alpha 冲刺 (10/10)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试整体软件 展示GitHub当 ...

  4. Java集合:ArrayList的实现原理

    Java集合---ArrayList的实现原理   目录: 一. ArrayList概述 二. ArrayList的实现 1) 私有属性 2) 构造方法 3) 元素存储 4) 元素读取 5) 元素删除 ...

  5. SAS数据集

    SAS数据集是存储在SAS逻辑库中.由SAS创建和处理的SAS文件,是SAS存储数据的主要方式.SAS数据集包含以表的观测(行)和 变量(列)为形式存在的数据值,以及用以描述变量类型.长度和创建该数据 ...

  6. C++探究transform算法

    transform函数原型 1. template<class _InIt, class _OutIt, class _Fn1> inline _OutIt transform(_InIt ...

  7. 提取日志中出现的userId或其他信息

    项目上线后经常出现需要统计用户数据.接口请求等.完美的情况下,在项目开始前就设计好哪些request.中间过程需要落地到db.或以一定格式存入专门的log中,但也常需要同学们临时去业务日志中grep ...

  8. AFNetworking 3.0中调用[AFHTTPSessionManager manager]方法导致内存泄漏的解决办法

    在使用AFNetworking3.0框架,使用Instruments检查Leaks时,检测到1000多个内存泄漏的地方,定位到 [AFHTTPSessionManager manager] 语句中,几 ...

  9. ETL概念详解

    ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要的一个环节. 通常情况下,在 ...

  10. Python自动化编程-树莓派GPIO编程(二)

    树莓派我们编程一般都直接用高效的python,针对于GPIO编程,python也是有这一方面的库的,这里最有名也是最常用的就是RPI.GPIO了.这个库是专门为树莓派GPIO编程所设计的,利用它你可以 ...