禁用HttpClient日志记录?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (136)

我在集成测试套件中使用了commons-httpclient 3.1。HttpClient的默认日志非常嘈杂,我似乎无法关闭它。没有一个有所作为。

大多数情况下,我只需要让org.apache.http.wire记录器关闭。部分问题是我不知道HttpClient尝试使用哪种类型的记录器,而大部分问题是我以前从未使用过这个库。我尝试创建一个log4j.properties文件并将其放在我的test / resources文件夹中,修改jre / lib中的master logging.properties文件,并将各种日志记录选项发送给Maven,如日志记录页面上指定的那样,并且它们都不是有什么区别。

提问于
用户回答回答于

注意:这个答案中的一些可能会重复你已经知道的事情(或者认为你知道的事情),但是这个问题存在一些错误信息,所以我会从头开始并且拼出全部内容

  • Commons HttpClient使用Commons-Logging来满足所有的日志需求。
  • Commons-Logging不是一个完整的日志框架,而是一些现有日志框架的封装
  • 这意味着当你想控制日志记录输出时,你(大多数)最终会配置一个库,不是Commons-Logging,但是因为Commons-Logging包装了其他几个库,所以我们很难猜测哪一个配置不知道如何配置你准确的设置。
  • Commons-Logging可以登录到log4j,但它也可以登录到java.util.logging(JDK1.4登录)
  • Commons-Logging试图变得聪明,猜测你已经在使用哪个日志框架,并将日志发送给它。
  • 如果您还没有日志框架,并且运行在1.4或更高的JRE上(您确实应该是),那么它可能会将其日志消息发送到JDK logging(java.util.logging
  • 依赖Commons-Logging的自动发现机制很容易出错。简单地添加log4j.jar到类路径将导致它切换它使用的日志机制,这可能不是你想要的
  • 您最好明确告诉Commons-Logging使用哪个日志库
  • 你可以commons-logging.properties按照这些说明创建文件来完成此操作
  • 你想要遵循的步骤来配置commons-httpclient日志记录
    1. 决定要使用哪种基础日志记录框架。有很多选择,但可能log4j或者java.util.logging是你最好的选择。
    2. 设置公共日志记录属性文件以指向正确的Log实现。例如使用log4j,将其放入属性文件中org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger,或使用JDK日志记录集org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger。这些也可以设置为系统属性(例如-D在命令行中使用)。
    3. 配置底层日志记录实现(例如log4j)以忽略不需要的消息,并输出您想要的消息。

这是很多步骤,但这就是它需要的。Apache-commons的开发人员往往认为你已经配置了一个日志框架,并且他们可以通过自动发现来确定它是哪一个。 如果这不适合你,那么让事情继续下去往往会多一点工作。

用户回答回答于

更新log4j.properties包括:

log4j.logger.httpclient.wire.header=WARN
log4j.logger.httpclient.wire.content=WARN

请注意,如果未安装Log4j库,则HttpClient(并因此将使用JWebUnit)将使用logback。在这种情况下,创建或编辑logback.xml以包括:

<configuration>
    <logger name="org.apache" level="WARN" />
    <logger name="httpclient" level="WARN" /> 
</configuration>

设置日志级别来WARN使用包名的Log4j org.apache.commons.httpclientlog4j.properties 是行不通的预期:

log4j.logger.org.apache.commons.httpclient=WARN

这是因为HttpClient(v3.1)的源使用以下日志名称:

public static Wire HEADER_WIRE = new Wire(LogFactory.getLog("httpclient.wire.header"));
public static Wire CONTENT_WIRE = new Wire(LogFactory.getLog("httpclient.wire.content"));

扫码关注云+社区