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日志并进行多维度分析。
相关文章
|
3月前
|
应用服务中间件 Linux 网络安全
【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面
【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面
|
3月前
|
网络协议 安全 应用服务中间件
在Linux中,Tomcat8005、8009、8080三个端口的含义?
在Linux中,Tomcat8005、8009、8080三个端口的含义?
|
3月前
|
缓存 Java 应用服务中间件
在Linux中,Tomcat和Resin有什么区别,工作中怎么选择?
在Linux中,Tomcat和Resin有什么区别,工作中怎么选择?
|
3月前
|
关系型数据库 Java MySQL
Linux安装JDK1.8 & tomcat & MariaDB(MySQL删减版)
本教程提供了在Linux环境下安装JDK1.8、Tomcat和MariaDB的详细步骤。这三个组件的组合为Java Web开发和部署提供了一个强大的基础。通过遵循这些简单的指导步骤,您可以轻松建立起一个稳定、高效的开发和部署环境。希望这个指导对您的开发工作有所帮助。
219 8
|
3月前
|
前端开发 Java 应用服务中间件
在Linux中,tomcat和nginx的区别是什么?
在Linux中,tomcat和nginx的区别是什么?
|
14天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
125 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
227 3
|
3月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
131 3
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1634 14
|
1月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
31 0