0

我有一个 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不会强制执行设置。

4

2 回答 2

2

我不认为 log4j 实际上在这里使用。Apache HTTP 客户端,它是产生调试的库,通过 apache commons 日志记录。

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

在您的类路径中有一个名为 jcl-over-slf4j 的库,它会导致日志消息进入 apache commons 日志记录以通过 SLF4J 桥接,然后改为 logback。(我知道这很复杂,但是试图让 SLF4J 充当所有其他人的门面,并且它的后端是“一个记录器来统治他们”)。

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

logger.xml 需要是一个完整的logback 配置文件。我不确定您是发布了 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 记录其配置自身的尝试。这可能会提供更多指示。

希望这可以帮助。

于 2012-07-24T20:54:53.703 回答
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)
于 2012-11-26T00:38:18.687 回答