Tomcat 下实现 catalina.out 日志分割
1.概述
1.1 问题描述
由于 Tomcat 的 catalina.out 日志量不断增加,占用空间较大,且默认是不滚动的,不便于分析问题。因此需要对其进行日志分割,并进行清理。
1.2 实现思路
使用软件 Cronolog 对 catalina.out 文件进行分割。
2.安装Cronolog
1)可于官网下载Cronolog
2)下载完解压安装
# tar zxvf cronolog-1.6.2.tar.gz
# cd cronolog-1.6.2
# ./configure
# make
# make install
3)查看 Cronolog 安装后所在目录,验证安装是否成功,输入以下代码:
#which cronolog
结果显示为:/usr/local/sbin/cronolog表示安装成功。
3. 修改Tomcat的catalina.sh文件
修改 Tomcat 的 bin 目录下的 catalina.sh 文件,具体的修改步骤如下:
1)第一步:
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
改为
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d
2)第二步
touch "$CATALINA_OUT"
改为
#touch "$CATALINA_OUT"
3)第三步
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
改为
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
|/usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null &
注:该修改共有两处位置需要更改,修改后如下图!](https://img-blog.csdnimg.cn/20210203220553185.png#pic_center)
4.重启Tomcat
重启 Tomcat 后,查看日志是否分割成功。
若如下:
则证明切割成功,后可依据这些日志文档进行分析。
5.shell利用crontab自动清除日志
linux下运行程序有时会产生大量的记录日志,时间一长就会占用很多的磁盘空间。每天手动清除也比较麻烦,因此一个定时脚本执行是很有必要的。
5.1 删除文件shell命令详解
find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;
例子:
find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
说明:将/opt/soft/log/目录下所有30天前带".log"的文件删除。具体参数说明如下:
find:linux的查找命令,用户查找指定条件的文件;
/opt/soft/log/:想要进行清理的任意目录;
-mtime:标准语句写法;
+30:查找30天前的文件,这里用数字代表天数;
"*.log":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三;
-exec:固定写法;
rm -rf:强制删除文件,包括目录;
{} \; :固定写法,一对大括号+空格+\+;
5.2 创建shell脚本即crontab计划任务
创建shell脚本:
vim del-30-days-ago-logs.sh
脚本内输入以下内容,可以写多行,以分号分隔,同时管理多个tomcat的日志:
find /usr/local/standard2.0-0816/hbjcw-bigdata/container/logs/ -mtine +30 -name "catalina.out.*" -exec rm -rf {} \;
分配可运行权限
chmod +x del-30-days-ago-logs.sh
使用crontab加入到系统计划任务:
crontab -e
在计划任务内输入以下内容:
10 0 * * * /opt/soft/log/del-30-days-ago-logs.sh >/dev/null 2>&1
(这里设置的是每天凌晨0点10分执行del-30-days-ago-logs.sh文件进行数据清理任务,根据自己需求灵活变化清理时间和脚本防止的地址)
log/del-30-days-ago-logs.sh >/dev/null 2>&1
(这里设置的是每天凌晨0点10分执行del-30-days-ago-logs.sh文件进行数据清理任务,根据自己需求灵活变化清理时间和脚本防止的地址)