当日志来自jboss-logging </logger>时,将忽略logback <logger>级别

时间:2013-08-02 17:38:34

标签: hibernate logging logback jboss-logging

我的Web应用程序(部署在tomcat 7上)正在使用hibernate 4.2,它使用jboss-logging进行日志记录。 Jboss日志记录在路径上找到slf4j并使用它。反过来,我有logback-classic来输出日志。一切都很好,但我无法自定义根日志记录级别,即

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

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

结果:

  

logback-test 16:47:03.689 [http-bio-8080-exec-5] DEBUG org.jboss.logging - 日志提供者:org.jboss.logging.Slf4jLoggerProvider

     

logback-test 16:47:04.244 [http-bio-8080-exec-5] DEBUG o.h.cfg.annotations.EntityBinder

     

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

对于来自jboss(o.h.cfg.annotations。*)的消息,level设置为info,但会打印调试消息。当我直接使用slf4j(rest.helpers。*)时,它会正确过滤掉我的调试消息,并打印我的信息消息。

现在,如果root日志级别设置为“none”,则允许一些调试消息将打印所有这些消息:

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

logback-test 10:22:25.926 [localhost-startStop-1] DEBUG rest.helpers.MyApplication -dMyApplication()2013年8月2日上午10:22:26 org.glassfish.jersey.server.ApplicationHandler初始化   信息:启动泽西岛申请

     

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

     

logback-test 10:22:42.995 [http-bio-8080-exec-5] DEBUG org.jboss.logging - 日志提供者:org.jboss.logging.Slf4jLoggerProvider

     

logback-test 10:22:43.025 [http-bio-8080-exec-5] DEBUG org.hibernate.type.BasicTypeRegistry

我没有允许org.hibernate调试消息,它们为什么会出现?我验证了正确的配置文件(通过更改日志格式)

请帮助我理解这一点。

我的类路径包含

  • slf4j-api 1.6.1
  • jul-to-slf4j 1.6.1
  • log4j-over-slf4j 1.6.1
  • logback-core 1.0.33
  • logback-classic 1.0.33
  • jboss-logging 3.1.0.GA.

logback.xml和logback-test.xml都在类路径中。 logback.xml包含<root level="warn">,没有进一步的专业化

3 个答案:

答案 0 :(得分:1)

我遇到了与freemarker相同的问题,但是在我的情况下,freemarker没有使用log4j-over-slf4j桥,而是直接使用了log4j(我在我的类路径中没有知道(通过maven依赖))。

当我告诉logback记录到文件并且freemarker日志仍然到达stdout时,我发现了这个问题。

解决方案是明确地从我使用的maven lib中排除log4j依赖项。

答案 1 :(得分:0)

要关闭不需要的日志,只需将根级别设置为OFF,并为要在日志记录目标中打印的包/类注册记录器。

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

答案 2 :(得分:0)

我在hcatnate中遇到了类似的问题,使用HikariCP和tomcat 8中的logback。 我使用JNDI在tomcat上全局定义Hikari池。

所以我最后只在CATALINA_HOME/lib下添加了Hikari,logback和slf4j jar。

在这种情况下,我花了很长时间才发现在这种情况下,logback.xml配置文件也必须在CATALINA_HOME/lib下由tomcat找到而不是CATALINA_HOME/conf下完成tomcat配置的其余部分。

希望它可以帮助某人。