log4j 禁用Apache HTTP客户端的日志记录?

dwthyt8l  于 2023-11-18  发布在  Apache
关注(0)|答案(4)|浏览(176)

我正在编写一个应用程序,其中我使用HTTP协议上传文件到服务器。一切都很好,我能够上传文件,我使用Apache HTTP客户端jar集来完成这一点。在应用程序中,我使用log4j日志框架,已设置为调试级别,默认情况下,Apache HTTP客户端也采用了相同的日志记录框架,具有相同的日志记录级别,并且正在生成大量日志。有人可以指导我如何禁用Apache HTTP的日志记录吗客户?
我在一个名为log4j.xml的XML文件的帮助下配置log4j。

3bygqnnd

3bygqnnd1#

假设您使用的是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>


在这些示例中,我将级别设置为warn,您可以选择使用none,但最小值error是合理的。

wrrgggsh

wrrgggsh2#

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


这表明日志记录发生在类Wire.java的第84行。然后您可以在您最喜欢的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    }


log变量保存记录器。转到此变量接收其值的位置:

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>


结论是:

  • 如果可能的话,学会为自己的问题找到答案,而不是问。
  • 不要相信每个人说的话。使用完全限定的类名来命名记录器是一种约定。像所有约定一样,没有人必须遵守它。Apache不这样做。
  • 当你不知道答案的时候,不要回答问题。这只是噪音。
ekqde3dh

ekqde3dh3#

您可以调整每个包的日志记录级别。下面是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. eatfloat. muttonite.torque包(和嵌套包)的类,级别将是“info”。因此,您需要找出HTTP客户端类所属的包,并将此类记录添加到配置中。

lymnna71

lymnna714#

您可以执行以下操作:
编辑logback.xml以包含以下内容:

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

字符串
如果使用log4j.properties,则编辑并添加以下内容:

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

相关问题