tomcat Catalina.ou按日保存日志文件分割方法

转:http://tanrishou.blog.163.com/blog/static/1502502009924112045630/

一、本文基于的环境:

操作系统:Linux(redhat)、Windows(XP、2003)

JDK版本:j2sdk1.4.2_04

Tomcat版本:tomcat-5.0.28

Cronolog版本:cronolog-1.6.2.tar.gz

cronolog-1.6.1-win32.zip

本文修改后的tomcat都是按日保存日志文件,文件格式如:catalina.2009-06-07.out

二、cronolog的简介(下载cronolog

Cronolog是一款日志轮循(rotation)工具,可以用它来把Apache、Tomcat等Web服务器上输出的日志切分成按日或月保存的文件。

Cronolog从标准输入中读取日志内容,然后把它们写到按指定格式命名的日志文件中。日 志文件的名称可以加入一段日期标记(如 Catalina.2009-06-07.out),当日期改变后Cronolog会把之前的日志文件关闭,再打开一个包含新日期的日志文件(如 Catalina.2009-06-08.out)。

利用Cronolog可以完美解决tomcat中的catalina.out日志文件不断增大,且不能在tomcat运行期间删除的问题。

需要注意的一个问题是,日期改变后cronolog并不是马上切换日志文件,而是需要有新的 日志输出才能触发cronolog切换日志文件。所以如果你想 在2009-06-08删除2009-06-07的日志文件,如果从2009-06-08的00:00开始到你执行删除时都没有日志输出,则 2009-06-07的日志文件可能仍然被占用着,导致删除失败。

三、Linux下使用Cronolog轮循(rotating)Tomcat日志

(1)首先安装cronolog(cronolog-1.6.2.tar.gz放于/opt下)

cd /opt

gzip –d cronolog-1.6.2.tar.gz

tar –xvf cronolog-1.6.2.tar

cd cronolog-1.6.2

./configure --prefix=/usr/local/cronolog //按自己需要指定安装路径,或不指定

make

make install

(2)修改Tomcat配置文件

先停止tomcat服务,然后修改以下文件:

%CATALINA_HOME%/bin/catalina.sh

org.apache.catalina.startup.Bootstrap "[email protected]" start \

>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &

替换为:

org.apache.catalina.startup.Bootstrap "[email protected]" start 2>&1 \

| /usr/local/cronolog/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &

另外删除行:

touch "$CATALINA_BASE"/logs/catalina.out

修改完毕后重新启动tomcat服务。

四、Windows下使用Cronolog轮循(rotating)Tomcat日志

(1)安装cronolog

解压cronolog-1.6.1-win32.zip,将cronolog.exe文件拷贝到Tomcat的bin目录下。

(2)修改Tomcat配置

在Windows下,tomcat默认是把日志内容直接输出到控制台的,而不是保存在catalina.out文件,所以要先修改为把日志内容输出到文件。

首先修改%CATALINA_HOME%/bin/startup.bat,将

call "%EXECUTABLE%" start %CMD_LINE_ARGS%

替换为:

call "%EXECUTABLE%" run %CMD_LINE_ARGS%

然后修改%CATALINA_HOME%/bin/catalina.bat,将

rem Execute Java with the applicable properties

if not "%JPDA%" == "" goto doJpda

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

goto end

:doSecurity

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

goto end

:doJpda

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

goto end

:doSecurityJpda

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

goto end

替换为:

rem Execute Java with the applicable properties

if not "%JPDA%" == "" goto doJpda

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% |%CATALINA_BASE%\bin\cronolog %CATALINA_BASE%\logs\catalina.%date:~0,10%.out >> null (应该是catalina.%%Y-%%m-%%d.out)

goto end

:doSecurity

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% |%CATALINA_BASE%\bin\cronolog %CATALINA_BASE%\logs\catalina.%date:~0,10%.out >> null (应该是catalina.%%Y-%%m-%%d.out)

goto end

:doJpda

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% |%CATALINA_BASE%\bin\cronolog %CATALINA_BASE%\logs\catalina.%date:~0,10%.out >> null (应该是catalina.%%Y-%%m-%%d.out)

goto end

:doSecurityJpda

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% |%CATALINA_BASE%\bin\cronolog %CATALINA_BASE%\logs\catalina.%date:~0,10%.out >> null (应该是catalina.%%Y-%%m-%%d.out)

goto end

修改完之后重新启动tomcat。

用于Windows环境的补充(2009-06-13):

写这篇文章的时候,在Windows下的配置还没有测试过,其实上面的写法是错误的!之前在windows下日志文件名使用“catalina.%Y- %m-%d.out”的方式生成的日志文件变成“catalina.md.out”的样子,并不是日期!然而使用上面的 “catalina.%date:~0,10%.out"得出的文件名是“catalina.2009-06-13.out",其中的日期是tomcat 启动时的日期,但是日志文件并不会随着日期改变而轮循(rotating)!

其实不管是在linux还是windows下,cronolog接受的日期格式都是“%Y%m%d%H%M“这样的格式。%Y表年,%m表月,%d表 日,%H表小时,%M表分钟。只有使用这样的格式指定日志输出文件的名称,cronolog才会按日期、时间的变化生成新的日志文件。

然而,在Windows下需要分两种情况(刚在cronolog-1.6.1.win32所带的INSTALL说明中看到):

Configuration for use with NT service:

TransferLog "|c:/apache/bin/convlog.exe c:/apache/logs/access%Y%m%d.log"

Configuration for use from command line:

TransferLog "|c:/apache/bin/convlog.exe c:/apache/logs/access%%Y%%m%%d.log"

也就是说,如果是通过命令行方式来启动tomcat的话,日志文件名的写法必须是“catalina.%%Y-%%m-%%d.out”才是正确的。

时间: 2024-08-26 02:28:32

tomcat Catalina.ou按日保存日志文件分割方法的相关文章

删除数据库日志文件的方法

原文:删除数据库日志文件的方法 你曾经有在执行SQL的时候,数据库报事务日志已满,然后执行报错.然后纠结于怎么删除数据库日志,捣鼓半天吗,现在就提供两种删除日志文件的方法,希望能够帮到你! 阅读目录 方法一:手工操作 方法二:存储过程代替手工操作 示例存储过程下载 回到顶部 方法一:手工操作   1.数据库->右键->属性->选项-恢复模式->由完成切换成简单   2.数据库->右键->任务->收缩-文件->由完成切换成简单->文件类型->日志-

Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件

关注finddreams,一起分享,一起进步!http://blog.csdn.net/finddreams/article/details/45569089 在开发中,我们常常用打印log的方式来调试我们的应用.在Java中我们常常使用方法System.out.println()来在控制台打印日志,以便我们的调试.Android中有一个专门的类Log来实现在Android系统下日志的打印,更加方便我们定位程序出现问题的地方. 但是Android官方提供的Log类在实际项目使用中,也不是非常方便

C#保存日志文件到txt中,可追加保存

/// <summary> /// 输出指定信息到文本文件 /// </summary> /// <param name="msg">输出信息</param> public void WriteMessage(string msg) { string path = "F:\\log\\";//日志文件路径&配置到Config文件中直接获取 string filename = DateTime.Now.ToStr

SQL存储过程删除数据库日志文件的方法

--日志文件收缩至多少M DECLARE @DBLogSise AS INT SET @DBLogSise=0 --查询出数据库对应的日志文件名称 DECLARE @strDBName AS NVARCHAR(500) DECLARE @strLogName AS NVARCHAR(500) DECLARE @strSQL AS VARCHAR(1000) SELECT @strLogName=B.name, @strDBName=A.name FROM master.sys.databases

清除日志文件的方法

工作中有时候不能直接删除日志文件,如运行中的mysql的日志文件,只能用清空文件内容的方法来清除,例如: cat /dev/null > ...log 下面的脚本执行的是清除系统日志messages的内容,这个操作只能由具有root权限的用户来完成: #!/bin/bash LOG_DIR=/var/log ROOT_UID=0        # $UID为0的时候,用户才具有root权限 # 必须使用root用户来运行 if [ "$UID" -ne "$ROOT_U

mongodb 2.6.x 清理过大日志文件的方法

一.日志清理步骤 1.使用数据库命令rotate日志,分别登陆到mongod和mongos实例上 # mongo --host localhost:27xxx MongoDB shell version: 2.6.x connecting to: localhost:27xxx/test replicaset003:SECONDARY> db test replicaset003:SECONDARY> use admin switched to db admin replicaset003:S

查询Oracle日志文件的方法(摘自http://database.51cto.com/art/201010/231519.htm)

Oracle日志文件相信经常使用Oracle数据库的朋友都比较熟悉了,下面将为您介绍的是查询Oracle日志文件的几种方法,供您参考学习. 1.查询系统使用的是哪一组日志文件:select * from v$log; 2.查询正在使用的组所对应的日志文件:select * from v$logfile; 3.强制日志切换:alter system switch logfile; 4.查询历史日志:select * from v$log_history; 5.查询日志的归档模式:select db

SQL Server 2008 R2:快速清除日志文件的方法

本例,快速清理“students”数据库的日志,清理后日志文件不足1M. USE [master] GO ALTER DATABASE students SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE students SET RECOVERY SIMPLE GO USE students GO --此处需要注意,并非所有数据库的日志文件名都是“数据库名_log” DBCC SHRINKFILE (N'students_log' , 0,TR

linux文件分割(将大的日志文件分割成小的)

linux下文件分割可以通过split命令来实现,可以指定按行数分割和安大小分割两种模式.Linux下文件合并可以通过cat命令来实现,非常简单. 在Linux下用split进行文件分割: 模式一:指定分割后文件行数 对与txt文本文件,可以通过指定分割后文件的行数来进行文件分割. 命令:split -l 300 large_file.txt new_file_prefix 模式二:指定分割后文件大小 split -b 10m server.log waynelog 对二进制文件我们同样也可以按