如何使用Tomcat自帶的日誌實現tomcat-juli.jar
前言
Tomcat自帶的日誌實現是tomcat-juli.jar
,它是對默認的JDK日誌java.util.logging進行一定的封裝,和標準JDK日誌支持相同的配置,但是和log4j等常用的日誌框架比起來功能要較為簡陋。但是tomcat-juli可以針對不同的classloader來使用不同的配置文件,使得tomcat下不同的Web應用程序可以使用各自獨立的日誌文件。
如果我們想在代碼中使用Tomcat自帶的日誌實現,也很簡單,首先拿到tomcat-juli.jar。該jar包存在於Tomcat安裝目錄下的lib下,或者你可以直接在Maven倉庫裏選擇你想要的版本去下載。
接著新建一個java項目,導入該jar包,然後在根目錄下新建一個配置文件logging.properties
配置文件logging.properties
tomcat-juli使用的配置文件是logging.properties,一個簡單的配置如下:
handlers= java.util.logging.ConsoleHandler
.level= INFO
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
com.lewis.test.TestLewis.level = SEVERE
這裏簡單解釋下,第一行表示使用ConsoleHandler來處理打印日誌,用來將信息打印到控制臺。
第二行表示輸出的日誌級別是INFO,可以在level前加上任意類名或者完整的包名,用於精準控制類/包的日誌級別,譬如第三行。
第四行表示輸出的日誌信息日期格式。
更多具體的配置可以去看看Tomcat的conf目錄下的logging.properties,裏邊有很多配置和註釋。
另外提一下,tomcat-juli的日誌級別和log4j等是不一樣的,其級別如下:
SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value)
測試類
測試類的代碼如下:
package com.lewis.test; import java.io.NotSerializableException; import java.util.logging.Level; import java.util.logging.Logger; public class TestLewis { private static Logger LOGGER; static { System.setProperty("java.util.logging.config.file", "D:\\lewis\\workspace\\test\\src\\main\\resources\\logging.properties"); //must initialize loggers after setting above property LOGGER = Logger.getLogger(TestLewis.class.getName()); } public static void main(final String[] args) { System.out.println("----System.out----"); System.err.println("----System.err----"); LOGGER.info("an info msg"); LOGGER.warning("a warning msg"); LOGGER.severe("a severe msg"); LOGGER.log(Level.INFO, "test1: a info msg", new NotSerializableException()); LOGGER.log(Level.WARNING, "test1: a warning msg", new NotSerializableException()); LOGGER.log(Level.SEVERE, "test1: a severe msg", new NotSerializableException()); }
這裏需要註意的是,tomcat-juli的打印語句也是不太一樣的,如果需要打印出具體的堆棧信息就必須自己指定日誌級別,如果使用自帶的日誌級別打印語句諸如.info()
等,只能打印出字符串,不能打印出堆棧信息。
還有就是必須在代碼的一開始就指定加載配置文件,通過System.setProperty("java.util.logging.config.file", "配置文件的路徑");
。如果沒有這一步,你會發現你的配置文件根本沒有效果。如果你去Tomcat的bin目錄下的catalina.bat可以發現,裏邊也是配置了這個參數:
set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
輸出結果
控制臺輸出如下:
----System.out----
----System.err----
Dec 07, 2018 5:56:04 PM com.lewis.test.TestLewis main
SEVERE: a severe msg
Dec 07, 2018 5:56:05 PM com.lewis.test.TestLewis main
SEVERE: test1: a severe msg
java.io.NotSerializableException
at com.lewis.test.TestLewis.main(TestLewis.java:75)
參考鏈接
- Java Util Logging - Loading logging.properties
- Tomcat日誌系統詳解
如何使用Tomcat自帶的日誌實現tomcat-juli.jar