在Play控制台中有选择地禁用log4j调试日志

时间:2012-07-24 20:16:48

标签: scala playframework log4j playframework-2.0 crawler4j

我有一个Play 2.0应用程序,从命令行运行play console。在我使用的其中一个库中的某个地方,它使用log4j并开始为[crawler4j][1]传输调试输出,我试图弄清楚如何在播放控制台中有选择地禁用该输出。我尝试在application.conflogger.xml中更改以下内容,但没有任何运气

application.conf
logger.root=ERROR
logger.play=ERROR
logger.application=ERROR

logger.xml
<logger name="org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager" level="ERROR"/>

以下是流式调试日志的示例

13:10:18.818 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.conn.tsccm.ConnPoolByRoute - Closing connections idle longer than 60 SECONDS
13:10:18.818 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.c.t.ThreadSafeClientConnManager - Closing connections idle longer than 60 SECONDS
13:10:18.818 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.conn.tsccm.ConnPoolByRoute - Closing connections idle longer than 60 SECONDS
13:10:18.818 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.c.t.ThreadSafeClientConnManager - Closing connections idle longer than 60 SECONDS
13:10:18.818 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.conn.tsccm.ConnPoolByRoute - Closing connections idle longer than 60 SECONDS
13:10:18.818 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.c.t.ThreadSafeClientConnManager - Closing connections idle longer than 60 SECONDS
13:10:18.819 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.conn.tsccm.ConnPoolByRoute - Closing connections idle longer than 60 SECONDS
13:11:18.818 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.c.t.ThreadSafeClientConnManager - Closing connections idle longer than 60 SECONDS
13:11:18.818 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.conn.tsccm.ConnPoolByRoute - Closing connections idle longer than 60 SECONDS
13:11:18.819 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.c.t.ThreadSafeClientConnManager - Closing connections idle longer than 60 SECONDS
13:11:18.819 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.conn.tsccm.ConnPoolByRoute - Closing connections idle longer than 60 SECONDS

为了清楚起见,当我从命令行运行Play应用程序时强制执行日志设置,当我从 play console 中运行它时,不强制执行设置。

2 个答案:

答案 0 :(得分:2)

我认为log4j实际上并没有在这里使用。 Apache HTTP客户端,即生成调试的库,通过apache commons日志记录。

Play2使用带有后备后端的SLF4J API。

你的类路径上有一个名为jcl-over-slf4j的库,它会导致日志消息进入apache commons,记录到bridge through SLF4J,然后再返回。 (我知道,但是试图允许SLF4J作为所有其他人的外观,并且它的后端成为“统治所有人的一个记录器”)。

play2 docs表示logger.xml应该允许您完全自定义日志记录设置,所以我认为当存在logger.xml文件时,application.conf设置无效。

logger.xml需要是完整的logback configuration file。我不确定您是否发布了logger.xml的全部内容或仅发布了更改。

要抑制所显示的输出,您应该能够将logger.xml的内容设置为以下内容:

<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <logger name="org.apache.http.impl.conn.tsccm" level="error" />

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

</configuration>

如果这不起作用,请将顶行更改为:

<configuration debug="true">

将导致logback记录其自身配置尝试。这可能会提供更多指示。

希望这有帮助。

答案 1 :(得分:1)

这对我有用:

import org.slf4j.{Logger, LoggerFactory}

LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME).asInstanceOf[
  ch.qos.logback.classic.Logger].setLevel(ch.qos.logback.classic.Level.INFO)