現象:
log4j配置了日誌輸入檔案為某個特定的檔案,在tomcat下可以正常輸現,而在was8.5下面,只是建立了這個檔案,但內容一直為空,所有的日誌都在systemout.log中。
產生原因:
was也是用的commons-logging日誌框架,commons-logging中logfactory 獲得實現的順序是
1. 從應用的 meta-inf/services/org.apache.commons.logging.logfactory 中獲得 logfactory實現
2. 從系統環境中獲得 org.apache.commons.logging.logfactory 獲得 logfactory 實現
3. 從 classpath 下的 commons-logging.properties 檔案中獲得 logfactory 實現
而之所以在 tomcat 下表現良好的 log4j 日誌輸出放到 was 下不靈了,是因為 was 在第二步截住了,was有乙個系統環境變數 org.qpache.commons.logging.logfactory 的值為 com.ibm.was.commons.logging.trlogfactory,這個類在 ws-commons-logging.jar 中。
解決方法1:
我們在使用 commons-logging 時,要能應用到所期望的 logfactory 實現就要在第一步獲得 logfactory 實現。 而 logger log = logger.getlogger(a.class) 用直接得到 log4j 的 logger 也就是跳開了用 logfactory 來獲得 logger 的尷尬,缺點就是程式中所有log log = logfactory.getlog(a.class)都得修改了;
解決方法2:
priority=1
org.apache.commons.logging.logfactory=org.apache.commons.logging.impl.logfactoryimpl
log4j日誌系統 Log4j
1.1 log4j的三大核心元件 1.2 loggers 記錄器 1.4 layouts 布局 org.apache.log4j.htmllayout 以html 形式布局 org.apache.log4j.patternlayout 可以靈活地指定布局模式 org.apache.log4j.lay...
log4j記錄不同的日誌 Log4j 日誌記錄方法
logger類具有處理日誌記錄活動的方法。我們可以使用兩個靜態方法建立logger類的例項 public static logger getrootlogger public static logger getlogger string name 第乙個方法返回沒有名稱的根日誌記錄器。第二個方法按名...
Log4j 日誌級別
日誌記錄器 logger 是日誌處理的核心元件。log4j具有5種正常級別 level 日誌記錄器 logger 的可用級別level 不包括自定義級別 level static level debug debug level指出細粒度資訊事件對除錯應用程式是非常有幫助的。static level ...