Linux下定时切割Tomcat日志并删除指定天数前的日志记录

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

System.out和System.err都被打印到catalina.out。catalina.out不会rotate。一般在部署Tomcat后,运行久了,catalina.out文件会越来越大,对系统的稳定造成了一定的影响。

1、可通过修改conf/logging.properties日志配置文件来屏蔽掉这部分的日志信息。

1
2
3
4
5
6
7
[root@localhost conf] # pwd
/usr/local/tomcat/conf
[root@localhost conf] # cp logging.properties logging.propertiesbak
[root@localhost conf] # vim logging.properties
  25 1catalina.org.apache.juli.FileHandler.level = FINE
  26 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base} /logs
  27 1catalina.org.apache.juli.FileHandler.prefix = catalina.

将level级别设置成WARNING就可以大量减少日志的输出,当然也可以设置成OFF,直接禁用掉。

一般日志的级别有:
SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value)

2、使用cronolog工具切分Tomcat的catalina.out日志文件

下载、安装cronolog

1
2
3
4
5
6
7
8
[root@localhost src] # rpm -qa |grep cronolog
[root@localhost src] # tar zxvf cronolog-1.6.2.tar.gz 
[root@localhost src] # cd cronolog-1.6.2
[root@localhost cronolog-1.6.2] # ./configure 
[root@localhost cronolog-1.6.2] # make && make install
[root@localhost cronolog-1.6.2] # which cronolog
/usr/local/sbin/cronolog
[root@localhost cronolog-1.6.2] #

用which cronolog可以查到安装的路径,这个路径待会在修改catalina.sh时会用到。

修改catalina.sh  将183行修改成184行内容,注释掉355行,368、369行替换成370、371行,379、380行替换成381、382行;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[root@localhost cronolog-1.6.2] # cp /usr/local/tomcat/bin/catalina.sh /usr/local/tomcat/bin/catalina.shbak
[root@localhost cronolog-1.6.2] # vim /usr/local/tomcat/bin/catalina.sh
182  if  [ -z  "$CATALINA_OUT"  ] ;  then
183  #  CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
184   CATALINA_OUT= "$CATALINA_BASE" /logs/catalina .%Y-%m-%d.out
185  fi
......
355  #  touch "$CATALINA_OUT"
......
363       -Djava.security.manager \
364       -Djava.security.policy== "$CATALINA_BASE" /conf/catalina .policy \
365       -Dcatalina.base= "$CATALINA_BASE"  \
366       -Dcatalina.home= "$CATALINA_HOME"  \
367       -Djava.io.tmpdir= "$CATALINA_TMPDIR"  \
368  #     org.apache.catalina.startup.Bootstrap "$@" start \
369  #      >> "$CATALINA_OUT" 2>&1 &
370      org.apache.catalina.startup.Bootstrap  "$@"  start 2>&1 \ 
371      |  /usr/local/sbin/cronolog  "$CATALINA_OUT"  >>  /dev/null  &
372 
373    else
374      "$_RUNJAVA"  "$LOGGING_CONFIG"  $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
375       -Djava.endorsed. dirs = "$JAVA_ENDORSED_DIRS"  -classpath  "$CLASSPATH"  \
376       -Dcatalina.base= "$CATALINA_BASE"  \
377       -Dcatalina.home= "$CATALINA_HOME"  \
378       -Djava.io.tmpdir= "$CATALINA_TMPDIR"  \
379  #     org.apache.catalina.startup.Bootstrap "$@" start \
380  #     >> "$CATALINA_OUT" 2>&1 &
381       org.apache.catalina.startup.Bootstrap  "$@"  start 2>&1 \ 
382       |  /usr/local/sbin/cronolog  "$CATALINA_OUT"  >>  /dev/null  &
383 
384    fi
[root@localhost bin] # ./catalina.sh start
Using CATALINA_BASE:    /app/apache-tomcat-7 .0.61
Using CATALINA_HOME:    /app/apache-tomcat-7 .0.61
Using CATALINA_TMPDIR:  /app/apache-tomcat-7 .0.61 /temp
Using JRE_HOME:         /app/jdk1 .7.0_79
Using CLASSPATH:        /app/apache-tomcat-7 .0.61 /bin/bootstrap .jar: /app/apache-tomcat-7 .0.61 /bin/tomcat-juli .jar
Tomcat started.
[root@localhost bin] # service tomcat stop
[root@localhost bin] # service tomcat start

可以通过./catalina.sh start 来查看配置文件是否正确;这样在/usr/local/tomcat/logs每天会自动生成catalina.%Y-%m-%d.out文件,如果有报错去掉前面的空格试试,下面我们要做的是定期清理这些过期的文件,我们可以通过crontab来实现

1
2
3
4
5
6
7
8
[root@localhost logs] # crontab -e
no  crontab  for  root - using an empty one
crontab : installing new  crontab
[root@localhost logs] # crontab -l
30 5 * * 6  /bin/find  /usr/local/tomcat/logs/  -mtime +7 - type  f -name  "catalina.*.out"  - exec  /bin/rm  -f {} \;
[root@localhost logs] # cat /var/spool/cron/root 
30 5 * * 6  /bin/find  /usr/local/tomcat/logs/  -mtime +7 - type  f -name  "catalina.*.out"  - exec  /bin/rm  -f {} \;
[root@localhost logs] #

日期格式串:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
%a             本地简短星期名(e.g.: Sun..Sat)   
%A            本地完整星期名(e.g.: Sunday .. Saturday)   
%b            本地简短月名(e.g.: Jan .. Dec)   
%B            本地完整月名(e.g.: January .. December)   
%c             本地日期与时间(e.g.: “Sun Dec 15 14:12:47 GMT 1996″)   
%d            一月中的第几日(01 .. 31)   
%j             一年中的第几天 (001 .. 366)   
%m           月名的数字表示 (01 .. 12)   
%U            一年中以星期日为每周第一天计算的星期数(00..53, 第一周包括新年的第一个星期日)   
%W           一年中以星期一为每周第一天计算的星期数(00..53, 第一周包括新年的第一个星期一)   
%w            星期名的数字表示 (0 .. 6, 0为星期日)   
%x             本地日期 (e.g. 今天在北京是: “15 /12/96 ″)   
%y             不带世纪的年(00 .. 99)   
%Y             带世纪的年(1970 .. 2038)

时间格式串:

1
2
3
4
5
6
7
%H               24小时制小时(00..23)   
%I                12小时制小时(01..12)   
%p               本地AM /PM 指示符   
%M             分钟(00..59)   
%S               秒(00..61)   
%X              本地时间(e.g.: “15:12:47″)   
%Z              时区 (e.g. GMT),如果不能检测出时区,值为空

特殊格式串:

1
2
3
%%               %字符   
%n                新行   
%t                 tab字符



本文转自 justin_peng 51CTO博客,原文链接:http://blog.51cto.com/ityunwei2017/1627604,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
安全 Linux 调度
在Linux中,如何实现,每星期天早8点服务器定时重启?
在Linux中,如何实现,每星期天早8点服务器定时重启?
|
2月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
6天前
|
Unix Linux Python
Cron定时设置在linux和mac中的使用
文章详细说明了如何在Linux和Mac操作系统中使用Cron进行定时任务的设置,并提供了多个Cron表达式的实例。
19 0
|
2月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
2月前
|
监控 安全 Linux
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
|
2月前
|
Java Linux C++
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
|
2月前
|
存储 Linux 网络安全
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
|
2月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
|
19天前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
1月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
61 9