Tomcat日志切割总结[通俗易懂]

Tomcat日志切割总结[通俗易懂]目录目录前言1.创建shell脚本进行catalina.out日志文件切割2.使用log4j成功使catalina.out文件实现分割3.用cronolog软件来分割Tomcat的catalina.out文件假设我们想日志以catalina.2018-08-31.out这种方式分割前言我们都知道将一个项目部署到Tomcat之后,Tomcat服…

大家好,又见面了,我是你们的朋友全栈君。

目录

前言

我们都知道将一个项目部署到Tomcat之后,Tomcat服务启动后的标准输出(stdout)和标准出错(stderr)都会默认重定向到${TOMCAT_HOME}/logs/catalina.out这个文件中,有时候短短一会儿这个文件就能达到几十兆甚至上百兆,日积月累这个文件如果不及时清理将会占用服务器磁盘大量空间从而影响到整个项目的正常运行;
再者这样大日志文件对于我们进行错误排查以及日志分析都不是很方便,一次打开也花上好几分钟,直接cat命令查看也要滚掉好多屏,并且那时候想要来切割的话又异常麻烦。
所以,现在我们提前做好用日期来分割日志的配置,即Tomcat运行的每天都按照日期命名新建一个日志文件。

1. 创建shell脚本进行catalina.out日志文件切割

编写一个.sh文件并赋予文件执行全向最后放入$TOMCAT_HOME/bin目录下面,然后结合linux系统自带的定时器进行Tomcat日志切割。Shell脚本如下:

#!/bin/bash 
cd  `dirname $0`                           ##进入执行脚本所在目录,我这里是$TOMCAT_HOME/bin
d=`date +%Y%m%d`                           ##获取当前日期
d7=`date -d'7 day ago' +%Y%m%d`            ##获取7天前的日期

cd  ../logs/                               ##进入日志所在目录
cp catalina.out   catalina.out.${d}        ##将当前日志的内容拷贝到以日期分割的新文件中,
echo "" > catalina.out                     ##并清空当前日志文件的内容
rm -rf catalina.out.${d7}                  ##删除七天前的日志

值得一提的是:执行这个脚本的定时任务的频率以及时间都要控制好,不然会有部分日志内容保存不下来的情况。

2. 使用log4j成功使catalina.out文件实现分割

在Tomcat根目录下建立 /webapps/项目名/WEB-INF/classes/log4j.properties,内容如下:

############################################################################ 
log4j.rootLogger=INFO, R 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=${TOMCAT_HOME}/logs/tomcat.newlog    #设定日志文件名
log4j.appender.R.MaxFileSize=100KB                          #设定文件到100kb即分割
log4j.appender.R.MaxBackupIndex=10                          #设定日志文件保留的序号数
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
############################################################################

注意:以上配置需要在Tomcat根目录下的 /webapps/项目名/WEB-INF/lib目录下加入log4j.jar和commons-logging.jar,然后重新启动Tomcat服务即可生效。

3. 用cronolog软件来分割Tomcat的catalina.out文件

  • 下载cronolog软件压缩包
[root@localhost ~]# cd /home/tools
[root@localhost tools]# wget http://cronolog.org/download/cronolog-1.6.2.tar.gz 
  • 解压软件包
[root@localhost tools]# tar xf cronolog-1.6.2.tar.gz 
  • 进入cronolog安装包
[root@localhost tools]# cd cronolog-1.6.2 
  • 运行安装
[root@localhost cronolog-1.6.2]# ./configure 
[root@localhost cronolog-1.6.2]# make 
[root@localhost cronolog-1.6.2]# make install 
  • 查看cronolog安装后所在目录(验证安装是否成功)
 [root@localhost cronolog-1.6.2] # which cronolog 
 /usr/local/sbin/cronolog

假设我们想日志以catalina.2018-08-31.out这种方式分割

  • 编辑tomcat下的/bin/catalina.sh脚本文件
org.apache.catalina.startup.Bootstrap “$@” start  \   
>> “$CATALINA_BASE”/logs/catalina.out 2>&1 & 
#将上面两行内容替换为以下内容:
org.apache.catalina.startup.Bootstrap "$@" start  2>&1 \   
| /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &  

#然后再注释掉:
touch “$CATALINA_BASE”/logs/catalina.out
#其实touch catalina.out(创建这个文件)的语句,注不注掉都无所谓,反正修改成功了里面不会有东西的。
  • 编辑Tomcat下的/conf/logging.properties日志配置文件
#注释掉以下内容:
catalina.org.apache.juli.FileHandler.prefix = catalina.  

Tomcat根目录/conf/logging.properties配置还牵涉一些其他相关的输出,不想输出其他的,就把相关的注掉,比如不想输出host-manager**.log的日志,就注掉以下行:

#4host-manager.org.apache.juli.FileHandler.level = FINE
#4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
#4host-manager.org.apache.juli.FileHandler.prefix = host-manager.
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler
  • 重启Tomcat服务查看配置是否成功

查看tomcat下的/logs/目录下看看日志是不是输入到按日期分割的日志文件里了,然后把服务所在主机的系统时间修改一下,比如修改到:下一天的23:58:00过两分钟,是不是又出现一个日志文件了?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151408.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于51单片机步进电机控制[通俗易懂]

    基于51单片机步进电机控制[通俗易懂]实现功能:1、用矩阵键盘设定电机目标转速及旋转方向,范围100~300转/分;2、测量、显示电机实际转速和方向(正转显示“P”,反转显示“N”);从实现功能上分析,软件可以分解3个功能模块:1,步进电机控制模块2,矩阵键盘输入模块3,显示输出模块步进电机工作原理步进电机通过输入脉冲信号进行控制,即电机的总转动角度由输入脉冲总数决定,而电机的转速…

    2022年5月31日
    34
  • python输出unicode编码_python gbk codec

    python输出unicode编码_python gbk codec解决Python报错–UnicodeDecodeError:‘gbk’codeccan’tdecodebyte0x80inposition658:illegalmultibytesequence今天在anaconda上新建一个python3.6环境后,使用时报错了:(base)C:\Users\peter>activatetf(tf)C:\Users\pe…

    2025年11月9日
    4
  • CentOS下mysql最大连接数设置 1040 too many connection

    CentOS下mysql最大连接数设置 1040 too many connection

    2021年12月6日
    65
  • 模仿学习笔记:行为克隆

    模仿学习笔记:行为克隆1模仿学习模仿学习(ImitationLearning)不是强化学习,而是强化学习的一种替代品。 模仿学习与强化学习有相同的目的: 两者的目的都是学习策略网络,从而控制智能体。 模仿学习与强化学习又有不同的原理: 模仿学习向人类专家学习,目标是让策略网络做出的决策与人类专家相同; 强化学习利用环境反馈的奖励改进策略,目标是让累计奖励(即回报)最大化。 2行为克隆概述行为克隆(BehaviorCloning)是最简单的模仿学习。 行为克隆的目的是模仿人的动作

    2025年11月22日
    4
  • ExpandableListView实例(一)_数据库增删改查处理和listitem点击长按处理

    ExpandableListView实例(一)_数据库增删改查处理和listitem点击长按处理本例说明:1.实例中表现层与数据处理层分开,代码可复用性强,如果能看懂代码对算法会有提高.2.组和子条目上”点击”事件处理,能够区分操作的是组还是子条目,并且得到组和子条目的内容.3.组和子条目上”长按”事件处理,能够区分组和子条目,并且得到组和子条目的内容.4.自定义条目样式,灵活与数据库中字段绑定.5.实现对DB的增删改查,并且操作后自动刷新.6.使用数据库处理框架AH

    2022年6月23日
    30
  • xampp环境配置下出现的问题解决 — mysqli_real_connect(): (HY000/1045): Access denied for user ‘root‘@‘localhost‘

    xampp环境配置下出现的问题解决 — mysqli_real_connect(): (HY000/1045): Access denied for user ‘root‘@‘localhost‘XAMPP环境配置下出现的问题版本:xampp7.3.1    今天,柳妹在虚拟机上面又一次搭建xampp的环境的时候,在mysql的管理界面对于root@localhost管理用户进行密码设定的时候,修改了密码,当再一次点击进入的时候,报错如下:MySQL返回:无法连接:无效的设置。mysqli_real_connect():(HY000/1045):Accessde…

    2022年7月12日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号