簡體   English   中英

Log4j不記錄INFO級別

[英]Log4j doesn't log INFO Level

對於WebSphere Portal中部署的應用程序,我有以下log4j.properties文件:

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);

我用這個記錄INFO消息:

logger.info(theObjectToLog);

當我部署我的應用程序時, debug.log文件中獲得的一切,我登錄logger.debug()但忽略一切我寫logger.info() 另一方面, info.log文件保持為空。

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

有任何想法嗎?

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

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

-Dlog4j.debug=true

然后檢查SystemOut.log文件。 Log4J將吐出大量有關其讀取的配置文件的跟蹤信息。

避免這種情況的最佳方法是執行以下操作:

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

作為第2步的替代方法,您可以將Log4J配置文件與應用程序本身捆綁在一起,但這會帶來其自身的缺點(例如,每當執行Log4J配置更改時都必須重新打包應用程序)。

另一個常見問題是您在類路徑中使用的JAR也使用log4j並且還設置了自己的appender。 因此,根據他們使用的設置以及您的類所在的包,這可能會導致您描述的問題。

所以:

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

通常,它應該是這些事情之一。 如果不起作用,請發布更明確的示例。

祝好運!

我過去所做的是為我要記錄的類設置特定日志。 聽起來您可以嘗試將根記錄器設置為INFO,看看是否能獲得您想要的消息。 這是我的log4j屬性文件的一小部分。 我為每個類設置了一個記錄器,並將它分配給我的“data”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

root rootger在調試模式下打開日志屬性,

在屬性文件的第一行使用INFO而不是DEbug。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM