tomcat catalina的日志切割

本文介绍两种Tomcat日志文件catalina.out的分割方法:一是通过cronolog工具按日期进行日志文件的分割;二是利用log4j实现日志文件达到一定大小后的自动分割。

用cronolog分割tomcat的catalina.out文件

# wget http://cronolog.org/download/cronolog-1.6.2.tar.gz

2、解压缩

# tar zxvf cronolog-1.6.2.tar.gz

3、进入cronolog安装文件所在目录

# cd cronolog-1.6.2

4、运行安装

# ./configure
# make
# make install

5、查看cronolog安装后所在目录(验证安装是否成功)

# which cronolog

一般情况下显示为:/usr/local/sbin/cronolog

要想分割tomcat的catalina.out,需作如下个工作:

在tomcat的bin目录的catalina.sh中找到2行:

org.apache.catalina.startup.Bootstrap “$@” start \
>> “$CATALINA_BASE”/logs/catalina.out 2>&1 &



Java代码
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &


同时,上面有一行

Java代码
touch “$CATALINA_BASE”/logs/catalina.out

vi /usr/local/tomcat/conf/logging.properties
注掉:catalina.org.apache.juli.FileHandler.prefix = catalina.
可以注释掉,完成之后重起Tomcat就可以了,
看logs文件中是否有catalina.2009-09-03.out样式的日志。


way2:
使用log4j成功使catalina.out文件实现分割。
在tomcat根目录下建立common/classes/log4j.properties,内容如下:
############################################################################
log4j.rootLogger=INFO, R
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.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根目录下的common/lib下加入log4j.jar和commons-logging.jar
重新启动tomcat即可。
参考:
http://tomcat.apache.org/tomcat-5.5-doc/logging.html

<think>我们正在解决Tomcatcatalina.out日志文件中中文显示乱码的问题。 乱码通常是由于字符编码不一致造成的。Tomcat默认使用UTF-8编码,但catalina.out日志的编码可能受到系统环境、终端设置或Tomcat配置的影响。 分析可能的原因: 1. 系统环境变量(如LANG)的编码设置不正确。 2. Tomcat启动脚本(catalina.sh)中没有正确设置文件编码。 3. 终端显示编码设置不正确。 解决方案: 步骤1:检查系统编码设置 在Linux系统中,可以通过以下命令查看当前编码: echo $LANG 如果输出不是UTF-8(如zh_CN.UTF-8),则需要设置。 步骤2:设置系统环境变量 编辑/etc/profile文件,添加以下行: export LANG="zh_CN.UTF-8" export LC_ALL="zh_CN.UTF-8" 然后执行:source /etc/profile 步骤3:修改Tomcat启动脚本(catalina.sh) 在catalina.sh中找到以下行(通常在文件顶部): #!/bin/sh 在下面添加: export LANG="zh_CN.UTF-8" export LC_ALL="zh_CN.UTF-8" 步骤4:重启Tomcat 重启Tomcat以使更改生效。 步骤5:检查终端编码 如果使用SSH客户端(如PuTTY),请确保客户端的字符编码设置为UTF-8。 如果以上步骤不能解决,还可以尝试修改日志输出的编码方式,例如在logging.properties中配置,但catalina.out是控制台输出,通常由启动脚本的环境决定。 另外,如果使用logrotate等工具切割日志,也要确保切割脚本不会改变文件编码(例如使用truncate命令是安全的,因为它不会改变文件编码)。 参考引用[2]中提到了一个日志切割脚本,其中使用了truncate命令,这个命令不会改变文件的编码,所以不会导致乱码。但是,如果使用其他方式处理日志(如重定向),则需要注意编码问题。 如果问题仍然存在,可以考虑将catalina.out的输出重定向到一个文件,并在重定向时指定编码: exec >> "$CATALINA_OUT" 2>&1 改为: exec >> "$CATALINA_OUT" 2>&1 -Dfile.encoding=UTF-8 但是,实际上Tomcat的启动脚本中已经支持通过JAVA_OPTS设置编码,所以更好的做法是在setenv.sh中设置: 创建setenv.sh(在Tomcat的bin目录下)并添加: export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8" 然后重启Tomcat。 总结:主要从系统环境、Tomcat启动环境和终端显示三个方面确保统一使用UTF-8编码。 如果按照上述步骤操作后,日志中仍然出现乱码,请检查应用程序输出的日志是否本身存在编码问题。 相关问题: 1. 如何检查Linux系统的当前字符编码设置? 2. Tomcat的setenv.sh文件有什么作用? 3. 除了catalina.out,Tomcat的其他日志文件出现乱码该如何解决?</think>### 解决Tomcat catalina.out日志中文乱码问题 中文乱码通常由**字符编码不一致**引起。以下是完整解决方案,按优先级排序: #### 🔧 核心解决方案(修改Tomcat配置) 1. **修改JVM字符集参数** 在 `bin/catalina.sh`(Linux)或 `bin/catalina.bat`(Windows)中增加编码设置: ```bash # 在文件开头添加 JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8" ``` Windows系统需将 `$JAVA_OPTS` 改为 `%JAVA_OPTS%` 2. **修改日志处理器编码** 编辑 `conf/logging.properties`,修改控制台处理器配置: ```properties java.util.logging.ConsoleHandler.encoding = UTF-8 ``` 3. **重启Tomcat生效** ```bash ./shutdown.sh && ./startup.sh # Linux shutdown.bat && startup.bat # Windows ``` #### ⚙️ 辅助解决方案(环境层面) 4. **检查系统环境变量** 确保系统语言设置为UTF-8: ```bash # Linux检查 echo $LANG # 应为 zh_CN.UTF-8 或 en_US.UTF-8 # 永久生效(/etc/profile添加) export LANG="en_US.UTF-8" export LC_ALL="en_US.UTF-8" ``` 5. **终端工具配置** - SSH工具(PuTTY/Xshell):设置字符编码为UTF-8 - 查看命令:`cat` 改用 `less` 或 `vim`(支持编码识别) #### 📂 日志切割注意事项 若使用日志切割工具(如cronolog/logrotate),需确保切割后文件保持UTF-8编码: ```bash # 示例切割命令(保留编码) cp catalina.out catalina.out.$(date +%Y-%m-%d) && truncate -s 0 catalina.out ``` 避免使用重定向 `>` 清空文件,可能破坏编码[^2][^3]。 #### ✅ 验证步骤 1. 创建测试Servlet输出中文: ```java response.getWriter().println("中文测试"); ``` 2. 检查日志: ```bash file -i catalina.out # 应显示 charset=utf-8 ``` > **关键点**:乱码本质是**数据流编码**(JVM输出)与**显示环境编码**(终端/文件查看器)不一致。优先确保JVM使用UTF-8输出[^1]。 --- ### 📚 相关问题 1. 如何验证Tomcat的JVM当前使用的字符编码? 2. Linux系统环境下,如何永久修改全局语言编码设置? 3. 使用logrotate切割日志时,如何避免中文乱码问题? 4. 除了catalina.out,Tomcat其他日志文件出现乱码应如何排查? [^1]: 改动最小,最简洁的 tomcat catalina.out日志切割(按天) [^2]: Docker容器Tomcatcatalina.out日志文件。将日志文件进行归档整理 [^3]: tomcat catalina.out日志切割处理方案
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值