2013-08-02 64 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的配置的其余部分是做中找到。

希望它可以帮助别人。