我有一个Play 2.0应用程序,从命令行运行play console
。在我使用的一个库的某个地方,它使用log4j
并开始流式传输[crawler4j][1]
的调试输出,我正试图找出如何在播放控制台中选择性地禁用该输出。我尝试在application.conf
和logger.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
中运行它时,不会强制执行这些设置。
我认为这里实际上没有使用log4j。ApacheHTTP客户端是生成调试的库,它通过apachecommons日志记录进行日志记录。
Play2使用带有logback后端的SLF4J API。
类路径上有一个名为jcl-over-slf4j的库,它会导致通往apachecommons的日志消息通过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记录其配置自身的尝试。这可能会提供更多的指针。
希望这能有所帮助。
这对我有效:
import org.slf4j.{Logger, LoggerFactory}
LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME).asInstanceOf[
ch.qos.logback.classic.Logger].setLevel(ch.qos.logback.classic.Level.INFO)