繁体   English   中英

禁用apache HTTP Client的日志记录?

[英]Disable logging of apache HTTP Client?

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

我正在使用XML文件名log4j.xml配置log4j。

假设你正在使用的HttpClient 4,不添加类似这样你的log4j.xml工作:

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

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

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

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

在这些例子中,我设置了警告级别,你可能选择使用none ,但是最小的错误是明智的。

给出的答案是人们回答他们甚至不理解的问题的好例子。 他们只是重复他们在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>

结论是:

  • 在可能的情况下,学会找到自己问题的答案而不是询问。

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

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

您可以调整每个包的日志记录级别。 以下是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客户端类所属的包和将此记录添加到您的配置中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM