我正在编写一个应用程序,其中我使用HTTP协议上传文件到服务器。一切都很好,我能够上传文件,我使用Apache HTTP客户端jar集来完成这一点。在应用程序中,我使用log4j日志框架,已设置为调试级别,默认情况下,Apache HTTP客户端也采用了相同的日志记录框架,具有相同的日志记录级别,并且正在生成大量日志。有人可以指导我如何禁用Apache HTTP的日志记录吗客户?我在一个名为log4j.xml的XML文件的帮助下配置log4j。
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是合理的。
wrrgggsh2#
给出的答案是人们回答他们甚至不理解的问题的很好的例子。他们只是重复他们在Apache HTTP客户端的糟糕文档中听到或读到的内容。类似于:
字符串如果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>
型结论是:
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客户端类所属的包,并将此类记录添加到配置中。
lymnna714#
您可以执行以下操作:编辑logback.xml以包含以下内容:
logback.xml
<configuration> <logger name="org.apache" level="WARN" /> <logger name="httpclient" level="WARN" /> </configuration>
字符串如果使用log4j.properties,则编辑并添加以下内容:
log4j.properties
log4j.logger.httpclient.wire.header=WARN log4j.logger.httpclient.wire.content=WARN
型
4条答案
按热度按时间3bygqnnd1#
假设您使用的是httpclient 4,那么在log4j.xml中添加this这样的东西是否有效:
字符串
如果你没有一个log4j.xml文件,请创建一个并将其添加到类路径中。
如果你正在使用httpclient 3,那么你必须使用这样的东西:
型
在这些示例中,我将级别设置为warn,您可以选择使用none,但最小值error是合理的。
wrrgggsh2#
给出的答案是人们回答他们甚至不理解的问题的很好的例子。他们只是重复他们在Apache HTTP客户端的糟糕文档中听到或读到的内容。类似于:
字符串
如果Apache HTTP客户端的文档是正确的,应该怎么做。在这种情况下,这个问题的发帖者会自己解决问题。给出这样糟糕的答案是一种侮辱。
问题是,尽管文件说:
每个类都有自己的日志,根据类的完全限定名命名。例如,类HttpClient有一个名为org.apache.commons.httpclient.HttpClient的日志。由于所有类都遵循此约定,因此可以使用名为org.apache.commons.httpclient的单个日志为所有类配置上下文日志记录。
这根本不是事实。
比给出答案更好的是展示如何自己找到它。要找到解决方案,您必须首先在日志中启用位置以查看日志发生的位置。然后日志将显示一行:
型
这表明日志记录发生在类Wire.java的第84行。然后您可以在您最喜欢的IDE中打开源代码,您将看到以下内容:
型
log变量保存记录器。转到此变量接收其值的位置:
型
现在你所要做的就是在第56行放置一个断点,然后在调试器中运行你的应用程序。当它停在第56行时,读取日志值。因为它是一个Log类型的对象,打开它,看看它的“name”属性。你会看到名称“httpclient”。很明显,Apache文档是错误的。
现在您可以禁用此记录器:
型
结论是:
ekqde3dh3#
您可以调整每个包的日志记录级别。下面是http://wiki.apache.org/logging-log4j/Log4jXmlFormat的示例:
字符串
因此,即使您的默认级别是“debug”,对于com. eatfloat. muttonite.torque包(和嵌套包)的类,级别将是“info”。因此,您需要找出HTTP客户端类所属的包,并将此类记录添加到配置中。
lymnna714#
您可以执行以下操作:
编辑
logback.xml
以包含以下内容:字符串
如果使用
log4j.properties
,则编辑并添加以下内容:型