2012-10-28 78 views
1

我有以下的log4j.properties文件,用於部署在WebSphere Portal中的應用程序:的Log4j不記錄信息級別

log4j.rootLogger=DEBUG, InfoAppender, DebugAppender 

log4j.appender.InfoAppender=org.apache.log4j.RollingFileAppender 
log4j.appender.InfoAppender.Threshold=INFO 
log4j.appender.InfoAppender.File=C:/info.log 
log4j.appender.InfoAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.InfoAppender.layout.ConversionPattern=%d %p [%c] - %m%n 

log4j.appender.DebugAppender=org.apache.log4j.RollingFileAppender 
log4j.appender.DebugAppender.Threshold=DEBUG 
log4j.appender.DebugAppender.File=C:/debug.log 
log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.DebugAppender.layout.ConversionPattern=%d %p [%c] - %m%n 

當我的代碼,我定義在類級別的記錄:

private static Logger logger = Logger.getLogger(IWannaLogThis.class); 

我登錄信息使用此:

logger.info(theObjectToLog); 

當我部署我的應用程序中,debug.log文件獲取我用logger.debug()登錄的所有內容,但忽略了我用logger.info()編寫的所有內容。另一方面,info.log文件保持空白。

最奇怪的是,在debug.loginfo.log上出現了一些由類JARS(如Hibernate Validator)所做的INFO和DEBUG消息,但我忽略了所有嘗試登錄我的代碼的東西。

任何想法?

回答

2

這很可能是一個類加載相關的問題。 WebSphere Portal在內部使用Log4J,所以我猜測你最終會使用WebSphere Portal提供的Log4J JAR文件以及它自己的Log4J屬性。

您可以驗證通過添加以下服務器實例的JVM參數:

-Dlog4j.debug=true

然後檢查SystemOut.log文件。 Log4J將會吐出大量關於它讀取的配置文件的跟蹤信息。

避免這種情況,最好的辦法是做到以下幾點:

  1. 捆綁Log4J的JAR文件與應用程序。
  2. 將共享庫與服務器關聯。在該共享庫中,放置您的Log4J配置文件。

作爲替代步驟2,你可以與應用程序本身捆綁你的log4j的配置文件,但將攜帶其自身的缺陷(例如,具有重新打包應用程序時,你執行Log4j配置變化)。

0

我過去所做的是爲我想要記錄的類設置特定的日誌。這聽起來像你可以嘗試將你的根記錄器設置爲INFO,並看看是否能得到你想要的消息。這裏有一點我的log4j屬性文件。我爲每個類設置一個記錄器,並將其分配給我的「數據」appender,該appender定義了日誌佈局。在記錄器中,我指定了特定的類,我想記錄並分別設置其日誌級別。任何記錄未在Loggers中定義的類我都使用rootCategory的默認日誌級別。

log4j.rootCategory=INFO, rollingFile, stdout 

#GetData Loggers 
log4j.logger.com.myapp.data=INFO, data 
log4j.logger.com.myapp.data.SybaseConnection=DEBUG, data 
log4j.logger.com.myapp.data.GetData=ERROR, data 


# data appender 
log4j.appender.data=org.apache.log4j.RollingFileAppender 
log4j.appender.data.layout=org.apache.log4j.PatternLayout 
log4j.appender.data.File=c\:\\Program Files\\MyApp\\logs\\MyApp-data.log 
log4j.appender.data.Append=true 
log4j.appender.data.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n 
1

另一個常見的問題是,你在你的classpath有JAR文件還使用log4j的,也有自己的追加程序設置。因此,根據他們使用的設置以及您的類所在的包,這可能會導致您描述的問題。

所以:

  • 確保您的包名是唯一的,不使用任何第三方庫。
  • 檢查類路徑中所有庫中的log4j設置。它們不應包含覆蓋您的常規設置。
  • 確保您的記錄器使用您的log4j.properties(您可以確定您的文件中所做的更改是否會影響您的記錄器)。
  • 如果可以,請確保您的log4j內容最後加載,以防第三方庫重置配置。他們不應該,但誰可以阻止他們。

通常,它應該是這些東西之一。發佈更明確的例子,如果它不起作用。

祝你好運!

0

你根記錄打開調試模式日誌屬性,

使用信息,而不是DEBUG在第一線的屬性文件。

相關問題