簡體   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