HttpClient लॉगिंग अक्षम करें


133

मैं एक एकीकरण परीक्षण सूट में कॉमन्स- httpclient 3.1 का उपयोग कर रहा हूं। HttpClient के लिए डिफ़ॉल्ट लॉगिंग अत्यंत शोर है और मैं इसे बंद नहीं कर सकता। मैंने यहां निर्देशों का पालन ​​करने की कोशिश की है, लेकिन उनमें से किसी को कोई फर्क नहीं पड़ता है।

ज्यादातर मुझे सिर्फ org.apache.http.wire लकड़हारा बंद करने की आवश्यकता है। समस्या का एक हिस्सा यह है कि मुझे नहीं पता है कि लकड़हारा HttpClient किस प्रकार का उपयोग करने की कोशिश कर रहा है और समस्या यह है कि मैंने पहले कभी इस पुस्तकालय का उपयोग नहीं किया है। मैंने एक log4j.properties फ़ाइल बनाने और अपने परीक्षण / संसाधन फ़ोल्डर में छोड़ने की कोशिश की, मास्टर लॉगिंग को संशोधित करना। jpro / lib में मास्टर फाइलिंग को संशोधित करना, और लॉगिंग पृष्ठ पर निर्दिष्ट के रूप में मावेन को विभिन्न लॉगिंग विकल्पों में भेजना और उनमें से कोई भी नहीं। कोई फर्क नहीं पड़ता।

किसी भी मदद की सराहना की है ... यह मुझे पागल कर रहा है।

अद्यतन: एक सुधार: यह वास्तव में HttpClient के jwebunit के उपयोग के माध्यम से उत्पन्न होता है, सवाल में उत्पादन होता है, न कि मेरा अपना। किसी भी तरह से, यह वांछनीय नहीं है।

अद्यतन: अब तक के प्रयासों के लिए धन्यवाद। मैंने नीचे सुझाई गई सभी चीजों की कोशिश की है लेकिन फिर भी कोई भाग्य नहीं है। मेरे पास निम्न सामग्रियों के साथ मेरे src / test / Resources फ़ोल्डर में एक फ़ाइल commons-log.properties है

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
log4j.configuration=log4j.properties

और निम्न सामग्री के साथ एक फ़ोल्डर में एक फ़ाइल log4j.properties

log4j.rootLogger=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n

#This is the line that should make httpclient shut up
log4j.logger.org.apache.http=ERROR

हालाँकि, जब मैं अपने परीक्षण चलाता हूँ, तब भी मुझे इस तरह से आउटपुट का एक गुच्छा मिलता है:

21:57:41.413 [main] DEBUG org.apache.http.wire - << "                                   [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "                                   [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "                               </ul>[\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "    [\n]"
21:57:41.424 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "                   </div>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "                </li>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "            [\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "            [\r][\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "        </ul>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "<div class="details">[\n]"
21:57:41.442 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-body details-precis  ">[\n]
"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-state">[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
Destroying 1 processes21:57:41.465 [main] DEBUG org.apache.http.wire - << "[\r][\n]"

तार के पार आने वाली हर चीज के लिए यह आउटपुट इस लाइब्रेरी को मेरे लिए अनुपयोगी बना रहा है ... जब तक कि मैं यह पता नहीं लगा सकता कि इसे बंद कैसे किया जाए। क्या इस लॉग कॉन्फ़िगरेशन को पढ़ने के लिए मुझे कुछ विशेष करने की आवश्यकता है?


इस समस्या के पार आने वाले सभी के लिए: -Dlog4j.debugअपने वीएम विकल्पों को जोड़ना सुनिश्चित करें कि सही कॉन्फिग फाइल लोड हो गई है
टॉमी

3
Stackoverflow.com/questions/1436761/… देखें । अंश करने के लिए: public class Main { static { System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); } // Rest of class as before }
पीवीएस

1
आधिकारिक डॉक्टर: hc.apache.org/httpclient-3.x/log.html
क्रिस्टोफ़

3
क्या यह कभी ओपी के लिए हल हो गया। यह सटीक समस्या मुझे मार रही है।
कोलिन बेल

2
क्या यह हल है? जवाबों के आवंटन की कोशिश की, कोई भाग्य नहीं।
Markvds

जवाबों:


85

log4j.propertiesशामिल करने के लिए अपडेट करें:

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

ध्यान दें कि यदि Log4j लाइब्रेरी स्थापित नहीं है, तो HttpClient (और इसलिए JWebUnit) लॉगबैक का उपयोग करेगा। इस स्थिति में, logback.xmlशामिल करने के लिए बनाएं या संपादित करें :

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

करने के लिए लॉग स्तर की स्थापना WARNlog4j पैकेज नाम का उपयोग कर के साथ org.apache.commons.httpclientमें log4j.properties काम नहीं करेगा अपेक्षा के अनुरूप:

log4j.logger.org.apache.commons.httpclient=WARN

इसका कारण यह है कि HttpClient (v3.1) का स्रोत निम्नलिखित लॉग नामों का उपयोग करता है:

public static Wire HEADER_WIRE = new Wire(LogFactory.getLog("httpclient.wire.header"));
public static Wire CONTENT_WIRE = new Wire(LogFactory.getLog("httpclient.wire.content"));

19
4.2.1 स्रोत में, लॉग नाम हैं: "org.apache.http.headers" और "org.apache.http.wire", हालांकि यहां तक ​​कि उनका उपयोग करते हुए, शोर एपा लॉगिंग मेरे लिए बंद नहीं होगा। ।
टिक्कलोन

धन्यवाद!!! इसके अलावा: यदि आपके पास यह समस्या कहीं आपके अपने कोड में है, जहाँ आप httpclient का उपयोग करते हैं और पहले से ही Log4j का उपयोग नहीं करते हैं: इसके अलावा log4j जार को classpath में शामिल करना न भूलें ...
FelixD

30

नोट: इस उत्तर में से कुछ चीजें आप पहले से ही जान सकने वाली चीजों को दोहरा सकते हैं (या सोचते हैं कि आप जानते हैं), लेकिन इस सवाल पर कुछ गलत जानकारी तैर रही है, इसलिए मैं शुरुआत में इसे शुरू करने जा रहा हूं और इसे सभी को याद करूंगा।

  • कॉमन्स HttpClient अपनी सभी लॉगिंग जरूरतों के लिए कॉमन्स-लॉगिंग का उपयोग करता है।
  • कॉमन्स-लॉगिंग पूर्ण लॉगिंग फ्रेमवर्क नहीं है, बल्कि कई मौजूदा लॉगिंग फ्रेमवर्क के आसपास एक आवरण है
  • इसका मतलब है कि जब आप लॉगिंग आउटपुट को नियंत्रित करना चाहते हैं, तो आप (अधिकतर) कॉमन्स-लॉगिंग के अलावा एक लाइब्रेरी को कॉन्फ़िगर करना चाहते हैं, लेकिन क्योंकि कॉमन्स-लॉगिंग कई अन्य लाइब्रेरी के चारों ओर घूमता है, हमारे लिए यह अनुमान लगाना कठिन है कि कौन सा व्यक्ति बिना किसी जानकारी के कॉन्फ़िगर कर सकता है। आपका बिल्कुल सेटअप।
  • कॉमन्स-लॉगिंग लॉग java.util.logging4j में लॉग इन कर सकते हैं, लेकिन यह लॉग इन भी कर सकते हैं (JDK1.4 लॉगिंग)
  • कॉमन्स-लॉगिंग स्मार्ट होने की कोशिश करता है और अनुमान लगाता है कि आप किस लॉगिंग फ्रेमवर्क का उपयोग पहले से कर रहे हैं, और इसके लॉग को उसी तक भेजें।
  • यदि आपके पास पहले से लॉगिंग ढाँचा नहीं है, और वह JRE पर चल रहा है जो 1.4 या उससे ऊपर का है (जो आपको वास्तव में होना चाहिए) तो यह संभवतः JDK लॉगिंग ( java.util.logging) में अपने लॉग संदेश भेज रहा होगा
  • कॉमन्स-लॉगिंग के ऑटोडिस्कवरी तंत्र पर भरोसा करने में त्रुटि का खतरा है। बस log4j.jarक्लासपाथ पर जोड़ने से यह स्विच करने का कारण बनता है कि कौन सा लॉगिंग तंत्र इसका उपयोग करता है, जो शायद आप नहीं चाहते हैं
  • आपके लिए कॉमन्स-लॉगिंग को स्पष्ट रूप से बताना बेहतर होगा कि कौन सी लॉगिंग लाइब्रेरी का उपयोग करना है
  • आप इन निर्देशों केcommons-logging.properties अनुसार एक फ़ाइल बनाकर ऐसा कर सकते हैं
  • कॉमन्स-httpclient लॉगिंग को कॉन्फ़िगर करने के लिए आप जिन चरणों का पालन करना चाहते हैं, वे हैं
    1. तय करें कि आप किस लॉगिंग लॉगिंग ढांचे का उपयोग करना चाहते हैं। कई विकल्प हैं, लेकिन शायद log4jया java.util.loggingआपके लिए सबसे अच्छे विकल्प हैं।
    2. सही Logकार्यान्वयन को इंगित करने के लिए कॉमन्स-लॉगिंग गुण फ़ाइल सेट-अप करें । log4j का उपयोग करने के लिए, इसे गुण फ़ाइल में डालें: org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLoggerया JDK लॉगिंग सेट का उपयोग करने के लिए org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger। इन्हें सिस्टम गुण (जैसे -Dकमांड लाइन पर उपयोग करना) के रूप में भी सेट किया जा सकता है ।
    3. अपने इच्छित संदेशों को अनदेखा करने के लिए अंतर्निहित लॉगिंग कार्यान्वयन (जैसे log4j) को कॉन्फ़िगर करें और इच्छित संदेशों को आउटपुट करें।

यह बहुत सारे कदम हैं, लेकिन यह है कि यह क्या लेता है। Apache-commons के डेवलपर्स यह मानकर चलते हैं कि आपके पास पहले से ही एक लॉगिंग फ़्रेमवर्क कॉन्फ़िगर किया गया होगा, और वे वर्क-आउट कर सकते हैं कि यह ऑटो-डिस्कवरी द्वारा कौन सा है।
यदि आपके लिए यह सच नहीं है, तो यह चीजों को चलाने के लिए थोड़ा अधिक काम करता है।


1
यह बहुत ही उपयोगी जानकारी है; मुझे वास्तव में ऐसा लग रहा है कि इसे इस पृष्ठ पर जोड़ा जाना चाहिए । क्या आपने इसे सिर्फ इसके लिए लिखा था?
natem345

1
यार, यह जवाब बहुत अच्छा है, लेकिन मैं इसे काम करने में विफल रहा। मैं ड्राप्वॉयर का उपयोग कर रहा हूं, और मैंने आपके द्वारा बताई गई हर चीज की कोशिश की, जिसका कोई फायदा नहीं हुआ: '(
विक सेड्वेवाइव

19

मैंने इसे अपनी log4j config फाइल में डाला

log4j.logger.org.apache.http.wire=WARN

यह आउटपुट को चेतावनी स्तर या उससे ऊपर तक सीमित करता है


19

इसने मेरे परीक्षणों के लिए काम किया;

java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "ERROR");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "ERROR");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers", "ERROR");

18

Log4j के लिए, निम्नलिखित को log4j.properties(एप्लिकेशन की sourceनिर्देशिका में) जोड़ें:

log4j.logger.org.apache=WARN
log4j.logger.httpclient=WARN

लॉगबैक के लिए, निम्नलिखित logback.xmlशोर को मार देगा:

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

1
मैं log4j का उपयोग कर रहा हूं। लॉग में पहली दो पंक्तियों को जोड़ने से मेरी समस्या पूरी तरह से हल हो जाती है। मेरे सभी अन्य लॉग संदेश मेरे द्वारा निर्धारित स्तर के अनुसार दिखाई देते हैं। जबकि अपाचे लॉग नहीं है। बड़ी मदद। धन्यवाद।
अरुण थुन्दिल ससेंद्रन

यह संभवतः आपकी स्थिति के आधार पर अलग-अलग होगा, लेकिन AWS एसडीके के साथ बॉक्स से बाहर सक्षम किए गए भयानक वर्बोज़ लॉगिंग को अक्षम करने के लिए, यह एकमात्र ऐसा काम है।
मैट बेकर

11

यह पता लगाने में बहुत लंबा समय लगा, लेकिन JWebUnit लॉगबैक लॉगिंग घटक के साथ बंडल में आता है , इसलिए यह भी उपयोग नहीं करेगा log4j.propertiesया commons-logging.properties

इसके बजाय, नामक एक फ़ाइल बनाएं logback.xmlऔर इसे अपने स्रोत कोड फ़ोल्डर (मेरे मामले में src) में रखें:

<configuration debug="false">
  <!-- definition of appender STDOUT -->
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
    </encoder>
  </appender>

  <root level="ERROR">
    <!-- appender referenced after it is defined -->
    <appender-ref ref="STDOUT"/>
  </root> 
</configuration>

लॉगबैक अभी भी विकास के अधीन है और लगता है कि एपीआई अभी भी बदल रहा है, इसलिए यह कोड नमूना भविष्य में विफल हो सकता है। इस StackOverflow प्रश्न को भी देखें ।


1
आप सुंदरी। मैंने इस चीज की वजह से लगभग एक बिल्ली को मार डाला। यह मुझे पागल कर रहा था।
मनीष पटेल

मेरे लिए यही समाधान था। मुझे लगता है कि इसकी वजह यह है कि अन्य पुस्तकालयों में मैं पारगमन में शामिल था, जिसमें लॉगबैक शामिल था, इसलिए यह इस लकड़हारे पर बंद हो गया।
नाथन

10

मैं इस मुद्दे को JUnit के साथ RestAssured का उपयोग करते समय किया था। मेरे लिए इस कार्यक्रम के दृष्टिकोण ने काम किया:

@BeforeClass
public static void setUpClass() {
    ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) org.slf4j.LoggerFactory.getLogger("org.apache.http");
    root.setLevel(ch.qos.logback.classic.Level.INFO);

    //...
}

2
शानदार, एकमात्र समाधान जो मेरे लिए काम करता है। बहुत बहुत धन्यवाद।
लासोट

धन्यवाद! परीक्षण विधि की शुरुआत में सटीक समान कोड का उपयोग कर रहा था, कुछ भी नहीं किया। इसे अपने स्वयं के @Beforeया @BeforeClassफ़ंक्शन में रखकर खूबसूरती से काम किया।
एक्सकैटबॉक्स

8

अपने लॉगिंग आउटपुट को कॉन्फ़िगर करने के लिए हम गुण फ़ाइल के बजाय XML का उपयोग करते हैं। निम्न कोड ने इस बकबक को चुप कराने का काम किया।

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

<logger name="httpclient.wire.header">
    <level value="fatal"/>
</logger>

<logger name="httpclient.wire.content">
    <level value="fatal"/>
</logger>

4

आपके log4.properties में - क्या आपके पास यह सेट है जैसे कि मैं नीचे करता हूं और कोई अन्य org.apache.httpलॉगर फ़ाइल में सेट नहीं है ?

-org.apache.commons.logging.simplelog.log.org.apache.http=ERROR

इसके अलावा, यदि आपके पास लॉग org.apache.http4j गुण फ़ाइल में कोई लॉग स्तर निर्दिष्ट नहीं है, तो यह log4j.rootLoggerस्तर विरासत में मिलेगा । इसलिए यदि आपने ईआरओआरओआर को log4j.rootLoggerकहने के लिए सेट किया है और org.apache.httpअपने log4j.properties में सेटिंग्स निकालते हैं जो इसे केवल ERRORविरासत द्वारा केवल लॉग संदेश बनाना चाहिए ।

अपडेट करें:

एक commons-logging.propertiesफ़ाइल बनाएं और उसमें निम्न पंक्ति जोड़ें। यह भी सुनिश्चित करें कि यह फ़ाइल आपके CLASSPATH में है।

org.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.Log4jFactory

एक पूर्ण लॉग 4j फ़ाइल और कोड को ओपी के लिए आमंत्रित करने के लिए जोड़ा गया। यह log4j.properties आपके CLASSPATH में होनी चाहिए। मैं फिलहाल के लिए ठहराव मान रहा हूं।

log4j.configuration=log4j.properties 
log4j.rootLogger=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n

log4j.logger.org.apache.http=ERROR

यहाँ कुछ कोड है जो आपको लकड़हारा को आमंत्रित करने के लिए अपनी कक्षा में जोड़ने की आवश्यकता है।

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; 

public class MyClazz
{
    private Log log = LogFactory.getLog(MyClazz.class);
    //your code for the class
}

HttpClient का उपयोग करने की कोशिश करने से पहले मुझे log4j.properties फ़ाइल की आवश्यकता नहीं थी। मैं अपने src / परीक्षण / संसाधनों / log4j.properties फ़ाइल में अपनी लाइनें डालने की कोशिश की, लेकिन इससे कोई फर्क नहीं पड़ा। क्या log4j.properties में commons.log विकल्प रखना भी सही है?
मैट बेकर

हाँ कॉमन्स-लॉगिंग लॉग 4j के आसपास सिर्फ एक आवरण है। आप अपने परीक्षण वर्ग में लकड़हारे को कैसे आमंत्रित करते हैं?
CoolBeans

(आपके अपडेट के बाद) मैंने इसे बनाया ताकि उपरोक्त लाइन मेरे log4j.properties फ़ाइल में केवल एक ही थी और यह अभी भी सब कुछ बाहर करती है।
मैट बेकर

1
मैं लकड़हारा नहीं है, HttpClient इसे अपने दम पर करता है।
मैट बेकर

यह आपके द्वारा दिए गए लिंक पर कहता है कि - "नोट: Log4j HttpClient वितरण में शामिल नहीं है।" इसलिए आपको निश्चित रूप से इसे अपने CLASSPATH में जोड़ना होगा। क्या आप आउटपुट को stdout (कंसोल) या लॉग फ़ाइल में देख रहे हैं? मैं आपके लिए इसे लागू करने के लिए कोड के साथ एक नमूना log4h फ़ाइल बनाऊंगा।
CoolBeans

4

सरल तरीका Log4j और HttpCLient (v3.1 इस मामले में, उच्चतर के लिए काम करना चाहिए, मामूली बदलाव की आवश्यकता हो सकती है)

सुनिश्चित करें कि सभी निर्भरताएँ सही हैं, और MD5 आपके डाउनलोड !!!!

import org.apache.commons.httpclient.HttpClient;  
import org.apache.log4j.Level;  
import org.apache.log4j.Logger;  

---

Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.WARN);
Logger.getLogger("httpclient.wire.header").setLevel(Level.WARN);
Logger.getLogger("httpclient.wire.content").setLevel(Level.WARN);

HttpClient client = new HttpClient();

क्या मुझे इसे mainविधि में रखना चाहिए ?
पारसीकर

@parsecer आप कर सकते हैं
WiR3D

4

मैं पिछले कुछ समय से इसी मुद्दे से त्रस्त था और आखिरकार इस पर गौर करने का फैसला किया। यह मुद्दा निकला कि मेरी परियोजना http- बिल्डर-0.5.2.jar पर एक निर्भरता थी जिसने अपने भीतर एक log4j.xml फ़ाइल बंडल की थी। और यकीन है कि पर्याप्त, org.apache.http.wire के लिए लॉग स्तर DEBUG था! जिस तरह से मैंने पाया कि यह सिर्फ मेरी निर्भरता में सभी जार फ़ाइलों के माध्यम से जाना और "जार टीवीएफ" और लॉग 4 जे के लिए पकड़ना था।

हालांकि इस खोज ने मेरे http- बिल्डर निर्भरता के संस्करण को 0.6 तक लाने के अंतिम समाधान के लिए नेतृत्व किया, लेकिन यह अभी भी मुझे चकरा देता है कि log4j.xml फ़ाइल को जार फ़ाइल में बंडल करते समय डेवलपर के दिमाग में क्या चला गया होगा। वैसे भी, यह संभवतः इस धागे के लिए प्रासंगिक नहीं है। लेकिन मुझे लगा कि इस समाधान का उल्लेख करने के लिए यह उपयोगी है जो मैंने पाया कि जब मैं अब से पहले एक समाधान खोज रहा था, तो मेरा कभी नहीं आया। उम्मीद है कि किसी को यह उपयोगी लगेगा।


इसी तरह के मुद्दे का उपयोग करते समय <!-- https://mvnrepository.com/artifact/com.fredericboisguerin.excel/excel-reader-writer --> <dependency> <groupId>com.fredericboisguerin.excel</groupId> <artifactId>excel-reader-writer</artifactId> <version>2.1</version> </dependency>। निर्भरता को हटा दिया और लॉग चले गए थे। धन्यवाद!
व्योम

3

मुझे JWebUnit के साथ भी यही समस्या थी। कृपया ध्यान दें कि यदि आप बाइनरी वितरण का उपयोग करते हैं तो लॉगबैक एक डिफ़ॉल्ट लकड़हारा है। JWebUnit के साथ log4j का उपयोग करने के लिए मैंने निम्न चरणों का पालन किया:

  • लॉगबैक जार हटा दिया
  • sfl4j - slf4j-log4j12-1.6.4.jar के लिए lod4j ब्रिज लाइब्रेरी जोड़ें
  • log4j.properties जोड़ें

संभवतः आपको Logback jars को हटाने की आवश्यकता नहीं है, लेकिन आपको sl44j को log4j का उपयोग करने के लिए मजबूर करने के लिए कुछ अतिरिक्त कदम की आवश्यकता होगी


धन्यवाद, मुझे OpenRdf का उपयोग करते समय एक ही समस्या थी। इस धागे में अन्य सभी युक्तियों का कोई प्रभाव नहीं पड़ता था जब तक कि मैं लॉगबैक जार को हटा नहीं देता, अब लॉग अच्छी तरह से शांत है।
अमरिल

3

निम्नलिखित 2 लाइनों ने मेरी समस्या पूरी तरह से हल कर दी:

Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.ERROR);
Logger.getLogger("httpclient").setLevel(Level.ERROR);

यह मेरे लिए भी काम करता था, लेकिन मुझे इसकी आवश्यकता नहीं थी: Logger.getLogger ("org.apache.commons.httpclient")। setLevel (Level.ERROR);
जैमल टॉम्स

3

Log4j प्रॉपर्टी फ़ाइल में नीचे की पंक्तियों को जोड़ें और यह http लॉग्स को बंद कर देगा: - log4j.logger.org.apache.http = OFF


इकाई परीक्षणों में (यदि मुख्य है, तो मुख्य में) भी @BeforeClass public static void BeforeClass() { PropertyConfigurator.configure("log4j.properties"); ...}सिंगल लाइन log4j.logger.org.apache.http के साथ log4j.properties फ़ाइल जोड़ें। OFF = रूट में होना चाहिए (src फ़ोल्डर के ठीक ऊपर)
Sasha

3

मुझे भी यही समस्या हो रही थी। [main] DEBUG org.apache.http.wireपरीक्षण चलाते समय पूरा कंसोल भरा हुआ था ।

जो समाधान मेरे लिए काम करता है वह एक लॉगबैक-टेस्ट.एक्सएमएल src / परीक्षण / संसाधन / लॉगबैक-टेस्ट.एक्सएमएल बना रहा था जैसा कि https://github.com/bonigarcia/webdrivermanager-examples/blob-master/src/test/resources में /logback-test.xml (रेफ - https://github.com/bonigarcia/webdrivermanager/issues/203 )

मेरे लॉगिंग इन्फोस को देखने के लिए, मैंने अपने पैकेज के नाम के साथ लकड़हारा का नाम = "io.github.bonigarcia" प्रतिस्थापित किया।

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.mypackage" level="DEBUG" />
    <logger name="org" level="INFO" />
    <logger name="com" level="INFO" />

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

2

इसी तरह की समस्या का हल खोजते समय मुझे इस पद पर ले जाया गया। टिम का जवाब बहुत मददगार था। मैट बेकर की तरह, मैं बहुत अधिक कॉन्फ़िगरेशन के बिना httpClient लॉग को बंद करना चाहता हूं। जैसा कि हमें यकीन नहीं था कि कॉमन लॉगिंग के तहत लॉगिंग कार्यान्वयन का उपयोग किस प्रकार किया गया था, मेरा समाधान यह था कि क्लास 4 में लॉग 4 जे जार फाइल को फेंककर लॉग 4 जे का उपयोग करके इसे मजबूर किया जाए। Log4j कॉन्फ़िगरेशन की डिफ़ॉल्ट सेटिंग आम-httpclient डीबग आउटपुट बंद कर देती है। बेशक, इसे और अधिक मजबूत बनाने के लिए, आप अपने लॉगिंग कॉन्फ़िगरेशनों को और अधिक परिभाषित करने के लिए आम-log.properties और log4j.properties फाइलें बना सकते हैं।


2

डालने की कोशिश करें

org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog

आपके कॉमन्स-log.properties में


2

अपाचे 4.5.3 के लिए, यदि आप सभी अपाचे http क्लाइंट को वार्न में लॉग इन करने के लिए स्तर को स्थानांतरित करना चाहते हैं, तो उपयोग करें:

log4j.logger.org.apache=WARN

2

यह मेरे लिए क्लास रूट पथ और नीचे सेटिंग में "logback.xml" जोड़ने के साथ काम करता है।

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <logger name="org.apache" level="WARN"/>
    <logger name="httpclient" level="WARN"/>
</configuration>

1

Jwebunit एकीकरण परीक्षण चलाते समय मुझे यही समस्या थी। मैंने इसे लॉगबैक को छोड़कर और slf4j-log4j12 में जोड़कर तय किया, जैसे:

<dependency>
  <groupId>net.sourceforge.jwebunit</groupId>
  <artifactId>jwebunit-htmlunit-plugin</artifactId>
  <version>3.0</version>
  <exclusions>
    <exclusion>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>

1

मुझे एक बार यह पता लगाने में उम्र लग गई, आपको इसकी आवश्यकता है:

log4j.logger.httpclient.wire=ERROR

मुझे लगता है कि HttpClient "httpclient.wire" को अपने लकड़हारे के नाम के रूप में उपयोग करता है, न कि "org.apache.commons.httpclient" पर।

डरपोक बगर्स।


1

इसने मेरे लिए काम किया।

System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire.header", "error");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "error");
System.setProperty("log4j.logger.org.apache.http", "error");
System.setProperty("log4j.logger.org.apache.http.wire", "error");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "error");

0

सबसे अच्छा समाधान मैंने पाया कि कॉमन्स-लॉगिंग को पूरी तरह से उपयोग करने से रोकने के लिए मावेन एन्फोर्सर प्लगइन का उपयोग किया गया था। फिर मैंने इसके बजाय लॉगिंग के लिए slf4j निर्भरता को जोड़ा। तो अपने pom.xml में निम्नलिखित जोड़ें

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>[your version here]</version>
    </dependency>

और maven-enforcer प्लगइन भी जोड़ें

<plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-enforcer-plugin</artifactId>
           <version>[your version here]</version>
           <executions>
               <execution>
                   <id>enforce</id>
                   <configuration>
                       <rules>
                           <DependencyConvergence />
                           <bannedDependencies>
                               <excludes>
                                   <exclude>commons-logging:commons-logging</exclude>
                               </excludes>
                           </bannedDependencies>
                       </rules>
                   </configuration>
                   <goals>
                       <goal>enforce</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>

Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M2:enforce (enforce) on project gs-serving-web-content: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed
परदेसी

0

मैंने अपने बाकी टेम्पलेट के लिए HttpCompordsClientHttpRequestFactory स्थापित करने के बाद ऐसी समस्या का अनुभव किया।

OkHttpClientHttpRequestFactory सेट करना ट्रैश लॉगिंग के साथ समस्या को हल करना चाहिए।


0

बस pom फ़ाइल में इन दो निर्भरताओं को जोड़ें: मैंने पहले चर्चा की कोशिश करने के बाद प्रयास किया और सफल रहा।

<!--Using logback-->
<dependency>
   <groupId>commons-logging</groupId>
   <artifactId>commons-logging</artifactId>
   <version>1.2</version>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

कॉमन्स-लॉगिंग -> लॉगबैक और डिफ़ॉल्ट जानकारी जबकि डीबग मौजूद नहीं होगा; आप उपयोग कर सकते हैं:

private static Logger log = LoggerFactory.getLogger(HuaweiAPI.class);

उस जानकारी को परिभाषित करने के लिए जिसे आप लॉग इन करना चाहते हैं: जैसे फाइनल रिजल्ट । केवल मुझे लॉग इन करने की जानकारी मौजूद होगी।


0

मैंने बिना किसी लाभ के सभी उपरोक्त समाधानों की कोशिश की। मेरे लिए सबसे नज़दीकी एक जोश एक था, जो एक logback.xml बनाने का सुझाव दे रहा था। यह काम किया, हालांकि कुछ भी नहीं मिला। Logback.xml के साथ खेलने के बाद, यह वही है जो मैंने समाप्त किया है

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <withJansi>true</withJansi>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    </encoder>
  </appender>
  <root level="INFO">
    <appender-ref ref="STDOUT"/>
  </root>
</configuration>

अब DEBUG के नीचे सभी स्तर सही तरीके से लॉग हो जाते हैं।


0

साथ में:

  • लॉग 2 जे 2 2.11.2
  • HttpClient 4.5.7 (एलेस्टिक्स खोज 7.0.0 बाकी ग्राहक)
  • कॉन्फ़िगर करने के लिए गुण फ़ाइल का उपयोग करना

एक जोड़ सकते हैं:

logger.httpclient.name=org.apache.http
logger.httpclient.level=info

उपरोक्त उदाहरण में 'httpclient' के साथ एक तार्किक नाम जिसे आप चुनते हैं।

(जावा 11 ओपनएफएक्स एप्लिकेशन पर परीक्षण किया गया।)


0

मेरे मामले में मैं xml कॉन्फ़िगरेशन का उपयोग करता हूं, और मैं इसे कॉन्फ़िगरेशन फ़ाइल में जोड़ता हूं

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


0

मेरे लिए, log4j प्रोप फ़ाइल में नीचे की पंक्तियों ने उन सभी गंदगी को साफ कर दिया जो कि HttpClient लॉगिंग से आया था ... मरे! :)

log4j.logger.org.apache.http.headers=ERROR
log4j.logger.org.apache.http.wire=ERROR
log4j.logger.org.apache.http.impl.conn.PoolingHttpClientConnectionManager=ERROR
log4j.logger.org.apache.http.impl.conn.DefaultManagedHttpClientConnection=ERROR
log4j.logger.org.apache.http.conn.ssl.SSLConnectionSocketFactory=ERROR
log4j.logger.org.springframework.web.client.RestTemplate=ERROR
log4j.logger.org.apache.http.client.protocol.RequestAddCookies=ERROR
log4j.logger.org.apache.http.client.protocol.RequestAuthCache=ERROR
log4j.logger.org.apache.http.impl.execchain.MainClientExec=ERROR
log4j.logger.org.apache.http.impl.conn.DefaultHttpClientConnectionOperator=ERROR
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.