2013-08-02 97 views
2

我的web應用程序(部署在tomcat 7上)使用hibernate 4.2,它使用jboss-logging進行日誌記錄。 Jboss日誌記錄在路徑上找到slf4j並使用它。反過來,我有logback-classic來輸出日誌。一切都工作得很好,但我不能自定義根日誌記錄級別,即logback <logger>當日志來自jboss日誌記錄時忽略級別

<logger name="o.h.cfg.annotations" level="info"/> 
<logger name="rest.helpers" level="info"/> 

<root level="debug"> 
    <appender-ref ref="STDOUT" /> 
</root> 

結果:

的logback測試16:47:03.689 [HTTP-BIO-8080-EXEC-5] DEBUG org.jboss.logging - 記錄提供者:org.jboss.logging.Slf4jLoggerProvider

的logback測試16:47:04.244 [HTTP-BIO-8080-EXEC-5] DEBUG ohcfg.annotations.EntityBinder

logback-test 10:00:11.911 [localhost-startStop-1] INF O rest.helpers.MyApplication

對於來自jboss(o.h.cfg.annotations。*)的消息,級別設置爲info,但會打印一條調試消息。當我直接使用slf4j(rest.helpers。*)時,它會正確過濾掉我的調試信息,並打印我的信息。現在

,如果根日誌級別被設置爲 「無」,允許一些調試消息將打印所有這些:

<logger name="o.h.cfg.annotations" level="debug"/> 
<logger name="rest.helpers" level="debug"/> 
<root level="none"/> 

的logback測試10:22:25.926 [本地主機 - startStop-1 ] DEBUG rest.helpers.MyApplication -dMyApplication()2013年8月2日上午10點22分26秒org.glassfish.jersey.server.ApplicationHandler初始化 INFO:起爆澤西應用

的logback測試10:22:26.253 [ localhost-startStop-1] INFO rest.helpers.MyApplication

的logback測試10:22:42.995 [HTTP-BIO-8080-EXEC-5] DEBUG org.jboss.logging - 記錄提供者:org.jboss.logging.Slf4jLoggerProvider

的logback試驗10點22分: 43.025 [HTTP-BIO-8080-EXEC-5] DEBUG org.hibernate.type.BasicTypeRegistry

我沒有讓org.hibernate作爲調試消息,他們爲什麼會出現?我驗證了正確的配置文件(通過更改日誌格式)

請幫我理解這一點。

我的類路徑中包含

  • SLF4J的API 1.6.1
  • 07月到SLF4J 1.6.1
  • log4j的環比SLF4J 1.6.1
  • 的logback核心1.0.33
  • logback-classic 1.0.33
  • jboss-logging 3.1.0.GA.

logback.xml和logback-test.xml都在類路徑中。的logback。xml包含<root level="warn">並沒有進一步的專業化

+0

你有沒有想過這個解決方案?我在部署到Websphere 8的應用程序上看到了相同的行爲。 – FGreg

+0

相關:https://forum.hibernate.org/viewtopic.php?f=1&t=1032044&start=0 – FGreg

回答

1

我有與freemarker相同的問題,但在我的情況下,freemarker沒有使用log4j-over-slf4j橋,但直接使用log4j(我沒有知道它在我的類路徑中(通過一個maven依賴))。

我發現了這個問題,當我告訴logback登錄到一個文件和freemarker日誌仍然到達標準輸出。

解決方案是顯式排除我使用的maven庫中的log4j依賴項。

0

要關閉不需要的日誌,只需簡單地將根級別設置爲OFF並註冊記錄器以查找要在日誌目標中打印的包/類。

<logger name="rest" level="INFO"/> 
<root level="OFF"> 
    <appender-ref ref="STDOUT" /> 
</root> 
0

我不得不使用HikariCP的logback Hibernate和類似的問題tomcat的8 中我使用JNDI來全局定義在Tomcat上阿光池。

所以我最後添加Hikari,logback和slf4j罐子只在CATALINA_HOME/lib下。

在這種情況下,我花了相當長的一段發現,在這種情況下,logback.xml配置文件也必須是CATALINA_HOME/lib下的Tomcat和CATALINA_HOME/conf其中的Tomcat的配置的其餘部分是做中找到。

希望它可以幫助別人。