禁用apache HTTP Client的日志记录?

时间:2011-03-02 10:08:08

标签: java apache http log4j

我正在编写一个应用程序,我使用HTTP协议将文件上传到服务器。一切都工作正常,我能够上传文件,我已经使用Apache HTTP客户端jar设置来实现这一目标。在应用程序中,我使用了已设置为DEBUG级别的log4j日志框架,默认情况下,Apache HTTP Client也选择了具有相同日志记录级别的相同日志框架,并且它生成了大量日志。任何人都可以指导我如何禁用apache Http客户端的日志记录?

我正在借助XML文件名log4j.xml配置log4j。

3 个答案:

答案 0 :(得分:7)

假设您使用的是 httpclient 4 ,则不会在您的log4j.xml工作中添加this之类的内容:

<logger name="org.apache.http">
  <level value="warn"/> 
</logger>

我没有log4j.xml创建一个它和你的类路径。

如果您使用 httpclient 3 ,那么您将不得不使用以下内容:

<logger name="org.apache.commons.httpclient">
  <level value="warn"/> 
</logger>

在这些示例中,我将级别设置为警告,您可以选择使用,但至少错误将是明智的。

答案 1 :(得分:1)

给出的答案是人们回答他们甚至不理解的问题的好例子。他们只是重复他们在Apache HTTP客户端的糟糕文档中听到或读过的内容。类似的东西:

<logger name="org.apache.commons.httpclient">
  <level value="warn"/> 
</logger>

如果Apache HTTP客户端的文档是正确的,应该怎么做。在这种情况下,这个问题的海报本身就能解决问题。给出这么糟糕的答案有点侮辱。

问题是虽然文档说:

  

每个类都有自己的日志,根据类的完全限定名称命名。   例如,类HttpClient有一个名为org.apache.commons.httpclient.HttpClient的日志。   由于所有类都遵循此约定,因此可以为其配置上下文日志记录   使用名为org.apache.commons.httpclient的单个日志的所有类。

根本不是真的。

比给出答案更好的是展示如何自己找到答案。要找到解决方案,首先要在日志中启用位置以查看日志发生的位置。然后日志将显示如下行:

2013-02-07 15:33:02,369 DEBUG [Some thread name] org.apache.commons.httpclient.Wire.wire(Wire.java:84) - << "[\r]"

这表明日志记录发生在第84行的Wire.java类中。然后,您可以在您喜欢的IDE中打开源代码,然后您将看到以下内容:

80    if (buffer.length() > 0) {
81        buffer.append("\"");
82        buffer.insert(0, "\"");
83        buffer.insert(0, header);
84        log.debug(buffer.toString()); // Log is happening here
85    }

日志变量保存记录器。转到此变量获得其值的位置:

52 /** Log for any wire messages. */
53 private Log log;
54 
55 private Wire(Log log) {
56    this.log = log;
57 }

现在你要做的就是在第56行设置一个断点并在调试器中运行你的应用程序。当它在第56行停止时,读取日志值。因为它是Log类型的对象,所以打开它看看它的“name”属性。您将看到名称“httpclient”。显然,Apache文档是错误的。

现在您可以使用以下命令禁用此记录器:

<logger name="httpclient">
  <level value="warn"/> 
</logger>

结论是:

  • 如果可能,请学会找到自己问题的答案,而不是询问。

  • 不要相信每个人都说的话。使用完全限定的类名命名记录器是一种约定。像所有公约一样,没有人有义务遵守它。阿帕奇没有。

  • 当您不知道答案时,不要回答问题。这只是噪音。

答案 2 :(得分:0)

您可以调整每个包的日志记录级别。以下是http://wiki.apache.org/logging-log4j/Log4jXmlFormat的示例:

<logger name="com.eatmutton.muttonsite.torque" additivity="false">
   <level value="info" />
   <appender-ref ref="local-torque" />
</logger>

因此,即使您的默认级别为“debug”,对于com.eatmutton.muttonsite.torque包(和嵌套包)的类,级别也将为“info” 因此,您需要找出HTTP客户端类所属的包,并将此类记录添加到您的配置中。