tomcat 控制台日志输出到文件

方法一 

   最近测试遇到一个问题,我们的项目使用windows2003服务器,tomcat+oracle数据库。项目中有两个测试人员,经常需要查看日志定位问题,但是有两个问题:
    1.windows下tomcat输出日志跟linux下不一样,linux可以远程连接使用tail命令很轻松就可以看到日志,并且可以随时停止。但windows的日志只输入到控制台,不输出到日志文件。这就使得只有开着控制台才能看得到日志,而且不能ctrl+C停止截取。

    2.用远程桌面连接的话,两个测试人员不可能同时看得到控制台,而若使用VNC,RADMIN等软件,又会造成双方操控很混乱。
    所以就在想,要是能像linux那样随时查看日志又不用操控控制台就好了。

    解决思路:
    1.让tomcat日志输出到文件。这个明显可以实现的。
    2.找个软件能够连接windows,并且使用命令动态查看日志文件,比如tail。其实linux中的大多数命令windows也都有,只不过被界面封装了,现在linux的广大爱好者早就研发出了将windows命令转为了相应的linux命令的软件,所以也不成问题。

    下面就开始寻找解决方法了:

    1.让tomcat日志输出到文件
    一般启动tomcat时都用startup.bat,但又有多少人真正研究过这个bat文件中到底暗藏什么玄机呢?
    我们来看一下这个bat文件。它使用call "%EXECUTABLE%" start %CMD_LINE_ARGS%这句话来调用catalina.bat启动。这句话执行的命令就相当于控制台输入catalina.bat start。怎么样,是不是跟linux很像啦,不过这个start是会在新窗口中启动catalina.bat,并将日志文件输出到新窗口中,这显然不是我们要的效果。我们将它改成call "%EXECUTABLE%" run %CMD_LINE_ARGS%。这样控制台就不会输出日志文件了,让catalina.bat去决定日志输出在哪里吧。

    那再来看一下catalina.bat。这里我就直接引用网上的方法了:
    寻找以%ACTION%结尾的四处,在后面加上 >> %CATALINA_BASE%\logs\detailLog.%DATE:~0,10%.log 
    detailLog是我自己起的名字,大家可以随意更改,但是注意不要与默认日志文件冲突,否则启动会报个错,尽管无关紧要。那%DATE:~0,10%是用来截取系统时间的(这里应该注意系统生成的时间格式问题,如果是2013/04/02则会出错,请确保系统时间格式)。在我的服务器上echo %DATE%,显示出的是“2013-04-02 星期二”,截取0-10位,也就是“2013-04-02”,所以今天产生的log文件名字应该是 detailLog.2013-04-02.log
这样再去双击startup.bat,就会发现控制台启动后不再输出日志文件。再去查看detailLog.2013-04-02.log,会发现日志都在里面。那下面的工作,就是如何简单的将日志文件显示出来了。

    2.动态查询windows日志文件
    我们都喜欢用tail命令,那就去找个windows中的tail命令。
    先下载一个UnxUtils,将它放在某个找得到的位置,解压,找到..\UnxUtils\usr\local\wbin目录,看到了吧,我们熟悉的linux命令都在里面了。将这个路径加到服务器系统环境变量PATH中,再打开cmd,输入tail --help,显示出帮助信息,好了,可以使用了。注意,远程桌面连接的童鞋,可能要在每一个用户那里都重新保存一下环境变量,否则其他用户会不认识这个命令哦。

    这样的话,在cmd中输入tail logs\detailLog.2013-04-02.log,就跟linux效果一样啦。
    我还是觉得不方便,每次都要输入一下,那何不写个bat文件呢?
    桌面上新建记事本,
    @echo off
    tail -f E:\apache-tomcat-6.0.24-2\logs\detailLog.%DATE:~0,10%.log
    保存为log.bat文件。直接双击搞定!

    另: 另一个文章中的有详细的说明
    由于把输出都重定向到了文件中,console中就无法实时显示日志内容了,如何做到既把日志保存到磁盘文件中,又能在屏幕上实时监控日志呢?

    看了很多dos命令,发现都无法做到。想到unix下有tail -f ,于是试着度娘了一下“dos tail”,还真找到了一个在dos下的tail命令,只是要先安装一个windows组件Windows Server 2003 Resource Kit Tools。
如安装目录为“D:\Program Files\Windows Resource Kits\Tools”,把这个路径加入到PATH环境变量。
在cmd下tail /? ,出现以下信息则说明安装成功了:

   usage: TAIL [switches] [filename]*
   switches: [-?] display this message
             [-n] display last n lines of each file (default 10)
             [-f filename] keep checking filename for new lines


    在tomcat主目录的bin下新建一个bat脚本taillog.bat,内容为(修改为自己的日志名称):

if not exist "%CATALINA_HOME%\logs\catalina.%date:~0,10%.out" echo "" > %CATALINA_HOME%\logs\catalina.%date:~0,10%.out
tail -f %CATALINA_HOME%\logs\catalina.%date:~0,4%-%date:~5,2%-%date:~8,2%.out




   最后在catalina.bat中调用这个脚本:
............
echo Using CATALINA_BASE:   %CATALINA_BASE%
echo Using CATALINA_HOME:   %CATALINA_HOME%
echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
if ""%1"" == ""debug"" goto use_jdk
echo Using JRE_HOME:        %JRE_HOME%
start taillog.bat
goto java_dir_displayed
..............





这样就可以即时把tomcat的应用日志输出到console,同时又按日期保存为日志文件了。

方法二:


I had the same situation, but I was using (liferay -> tomcat) startup.bat and it always opened up tomcat console. The way to edit the startup.bat file, so that it outputs the log into a file was like this:

Look for the line:

call "%EXECUTABLE%" start %CMD_LINE_ARGS%
and edit it, so it looks like this:
call "%EXECUTABLE%" run >..\logs\outputfile.log 2>&1 start %CMD_LINE_ARGS% run >..\logs\outputfile.log 2>&1



You can find your output in the tomcat's logs folder. The file is outputfile.log. 

引用:

1. windows下同时输出tomcat应用日志到文件和屏幕  

2. windows下使用命令动态输出tomcat日志

3. How to redirect tomcat console log to files? Tomcat started via windows bat





你可能感兴趣的:(tomcat 控制台日志输出到文件)