最近測試遇到一個問題,咱們的項目使用windows2003服務器,tomcat+oracle數據庫。項目中有兩個測試人員,常常須要查看日誌定位問題,可是有兩個問題:
1.windows下tomcat輸出日誌跟linux下不同,linux能夠遠程鏈接使用tail命令很輕鬆就能夠看到日誌,而且能夠隨時中止。但windows的日誌只輸入到控制檯,不輸出到日誌文件。這就使得只有開着控制檯才能看獲得日誌,並且不能ctrl+C中止截取。 html
2.用遠程桌面鏈接的話,兩個測試人員不可能同時看獲得控制檯,而若使用VNC,RADMIN等軟件,又會形成雙方操控很混亂。
因此就在想,要是能像linux那樣隨時查看日誌又不用操控控制檯就行了。 java
解決思路:
1.讓tomcat日誌輸出到文件。這個明顯能夠實現的。
2.找個軟件可以鏈接windows,而且使用命令動態查看日誌文件,好比tail。其實linux中的大多數命令windows也都有,只不過被界面封裝了,如今linux的廣大愛好者早就研發出了將windows命令轉爲了相應的linux命令的軟件,因此也不成問題。 linux
下面就開始尋找解決方法了: shell
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文件。直接雙擊搞定! apache
另: 另外一個文章中的有詳細的說明
因爲把輸出都重定向到了文件中,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,內容爲(修改成本身的日誌名稱):
windows
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:
tomcat
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日誌
oracle
3. How to redirect tomcat console log to files? Tomcat started via windows bat