3

我的 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] 调试 org.jboss.logging - 日志提供程序:org.jboss.logging.Slf4jLoggerProvider

logback-test 16:47:04.244 [http-bio-8080-exec-5] 调试 ohcfg.annotations.EntityBinder

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

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

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

<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 初始化信息:启动 Jersey 应用程序

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

logback-test 10:22:42.995 [http-bio-8080-exec-5] 调试 org.jboss.logging - 日志提供程序:org.jboss.logging.Slf4jLoggerProvider

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

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

请帮助我理解这一点。

我的类路径包含

  • slf4j-api 1.6.1
  • 七月到 slf4j 1.6.1
  • log4j-over-slf4j 1.6.1
  • logback 核心 1.0.33
  • logback-经典 1.0.33
  • jboss 日志记录 3.1.0.GA。

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

4

3 回答 3

1

我对freemarker有同样的问题,但是在我的例子中,freemarker没有使用log4j-over-slf4j桥,而是直接使用了log4j(我在我的类路径中不知道(通过maven依赖))。

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

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

于 2013-08-08T10:52:12.710 回答
0

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

所以我最后只在CATALINA_HOME/lib.

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

希望它可以帮助某人。

于 2017-11-11T18:33:30.997 回答
-1

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

<logger name="rest" level="INFO"/>
<root level="OFF">
    <appender-ref ref="STDOUT" />
</root>
于 2015-10-03T10:04:27.830 回答