最近测试遇到一个问题,我们的项目使用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
............ 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 ..............
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
1. windows下同时输出tomcat应用日志到文件和屏幕
2. windows下使用命令动态输出tomcat日志
3. How to redirect tomcat console log to files? Tomcat started via windows bat