HttpClient günlük kaydını devre dışı bırakın


134

Bir entegrasyon test paketinde commons-httpclient 3.1 kullanıyorum. HttpClient için varsayılan günlük kaydı son derece gürültülü ve onu kapatamıyorum. Buradaki talimatları izlemeyi denedim ama hiçbiri bir fark yaratmıyor.

Çoğunlukla org.apache.http.wire logger'ı kapatmam gerekiyor. Sorunun bir kısmı, HttpClient'ın ne tür bir kaydedici kullanmaya çalıştığını bilmiyorum ve sorunun çoğu, bu kitaplığı daha önce hiç kullanmadım. Bir log4j.properties dosyası oluşturmayı ve bunu test / kaynaklar klasörüme bırakmayı, jre / lib'deki ana logging.properties dosyasını değiştirmeyi ve günlük kaydı sayfasında belirtildiği gibi çeşitli günlük seçeneklerini Maven'e göndermeyi denedim ve hiçbirini herhangi bir fark yaratın.

Herhangi bir yardım minnettar ... bu beni deli ediyor.

GÜNCELLEME: Bir düzeltme: söz konusu çıktının aslında jwebunit'in HttpClient kullanımından kaynaklandığı görülüyor, benimki değil. Her iki durumda da arzu edilmez.

GÜNCELLEME: Şimdiye kadarki girişimler için teşekkürler. Aşağıda önerilen her şeyi denedim ama yine de şansım yok. Src / test / resources klasörümde aşağıdaki içeriğe sahip bir commons-logging.properties dosyası var

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

ve aynı klasörde aşağıdaki içeriğe sahip bir log4j.properties dosyası

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

Bununla birlikte, testlerimi çalıştırdığımda yine de şöyle bir sürü çıktı alıyorum:

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]"

Telin karşısına çıkan her şey için bu çıktı, bu kitaplığı benim için kullanılamaz hale getiriyor ... yani onu nasıl kapatacağımı bulana kadar. Bu günlük yapılandırmasını okumak için yapmam gereken özel bir şey var mı?


Bu sorunla karşılaşan herkes için: -Dlog4j.debugDoğru yapılandırma dosyasının yüklendiğinden emin olmak için VM seçeneklerinizi eklediğinizden emin olun
Tommy

3
Bkz stackoverflow.com/questions/1436761/... . Alıntı yapmak için: public class Main { static { System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); } // Rest of class as before }
PVS


3
Bu hiç OP için çözüldü mü? Bu tam sorun beni öldürüyor.
Collin Bell

2
Bu çözüldü mü? Cevapların payını denedim, şans yok.
Markvds

Yanıtlar:


85

Şunları log4j.propertiesiçerecek şekilde güncelleyin :

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

Log4j kütüphanesi kurulu değilse, HttpClient (ve dolayısıyla JWebUnit) logback kullanacaktır. Bu durumda, logback.xmlşunları içerecek şekilde oluşturun veya düzenleyin :

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

Günlük düzeyi ayarlama WARNLog4J paket adı kullanarak org.apache.commons.httpclientiçinde log4j.properties çalışmaz beklendiği gibi:

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

Bunun nedeni, HttpClient (v3.1) kaynağının aşağıdaki günlük adlarını kullanmasıdır:

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 kaynağında, günlük adları: "org.apache.http.headers" ve "org.apache.http.wire" şeklindedir, bunları kullansalar bile, gürültülü apache günlüğü benim için kapatılmayacak gibi görünüyor .
Tinclon

Teşekkür ederim!!! Ayrıca: Bu sorunu kendi kodunuzda httpclient kullandığınız ve halihazırda Log4j kullanmadığınız bir yerde yaşıyorsanız: Ayrıca sınıf
yoluna

30

Not: Bu yanıtlardan bazıları zaten bildiğiniz (veya bildiğinizi düşündüğünüz) şeyleri tekrar edebilir, ancak bu soru üzerinde dolaşan bir miktar yanlış bilgi var, bu yüzden en baştan başlayıp hepsini açıklayacağım

  • Commons HttpClient, tüm günlük kaydı ihtiyaçları için Commons-Logging kullanır.
  • Commons-Logging, tam bir günlükleme çerçevesi değil, daha çok mevcut birkaç günlükleme çerçevesi etrafında bir sarmalayıcıdır
  • Bu, günlük çıktısını kontrol etmek istediğinizde, (çoğunlukla) Commons-Logging dışında bir kitaplık yapılandırmanız gerektiği anlamına gelir, ancak Commons-Logging birkaç diğer kitaplığı çevrelediği için, bilmeden hangisini yapılandıracağımızı tahmin etmemiz zordur. tam kurulumunuz.
  • Commons-Logging, java.util.logginglog4j'de oturum açabilir, ancak aynı zamanda oturum açabilir (JDK1.4 günlüğü)
  • Commons-Logging akıllı davranmaya ve hangi günlük çerçevesini kullandığınızı tahmin etmeye çalışır ve günlüklerini buna gönderir.
  • Halihazırda bir günlük çerçeveniz yoksa ve 1.4 veya üzeri bir JRE üzerinde çalışıyorsanız (ki gerçekten olması gerekir), muhtemelen günlük mesajlarını JDK günlüğüne ( java.util.logging) gönderecektir.
  • Commons-Logging'in otomatik bulma mekanizmasına güvenmek hataya meyillidir. Basitçe log4j.jarsınıf yoluna eklemek , hangi günlük mekanizmasını kullandığını değiştirmesine neden olur, ki bu muhtemelen istediğiniz şey değildir
  • Commons-Logging'e hangi günlük kütüphanesini kullanacağını açıkça söylemeniz tercih edilir.
  • Bu talimatlaracommons-logging.properties göre bir dosya oluşturarak bunu yapabilirsiniz.
  • Commons-httpclient günlük kaydını yapılandırmak için izlemek istediğiniz adımlar şunlardır:
    1. Hangi temel günlük çerçevesini kullanmak istediğinize karar verin. Orada seçenekleri bir dizi vardır, ama muhtemelen log4jya java.util.loggingsizin için en iyi seçeneklerdir.
    2. Ortak günlük özellikleri dosyasını doğru Loguygulamaya işaret edecek şekilde ayarlayın . örneğin, log4j kullanmak için, bunu özellikler dosyasına koyun: org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLoggerveya JDK günlük kümesini kullanmak için org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger. Bunlar ayrıca sistem özellikleri olarak da ayarlanabilir (örneğin -Dkomut satırında kullanılarak).
    3. İstemediğiniz mesajları yok saymak ve istediğiniz mesajları çıkarmak için temeldeki günlük uygulamasını (örn. Log4j) yapılandırın.

Bu çok fazla adım, ama gereken bu. Apache-commons'daki geliştiriciler, önceden yapılandırılmış bir günlükleme çerçevesine sahip olduğunuzu varsayma eğilimindedir ve otomatik keşif yoluyla bunun hangisi olduğunu bulabilirler.
Bu sizin için doğru değilse, işleri yürütmek için biraz daha fazla iş yapma eğilimindedir.


1
Bu çok faydalı bir bilgidir; Gerçekten bu sayfaya eklenmesi gerektiğini hissediyorum . Bunu sadece bunun için mi yazdın?
natem345

1
Dostum, bu cevap harika, ama işe yaramadı. Dropwizard kullanıyorum ve bahsettiğiniz her şeyi boşuna denedim: '(
Vic Seedoubleyew

19

Bunu log4j yapılandırma dosyama koydum

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

Bu, çıkışı Uyarı seviyesi veya üzerine sınırlar


19

Bu benim testlerim için çalıştı;

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 için aşağıdakileri ekleyin log4j.properties(uygulamanın sourcedizinine):

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

Yeniden oturum açma için aşağıdakiler logback.xmlgürültüyü ortadan kaldırır :

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

1
Log4j kullanıyorum. Günlüğe ilk iki satırı eklemek sorunumu tamamen çözer. Diğer tüm günlük mesajlarım, belirlediğim seviyeye göre görünüyor. Apache günlükleri ise yapmaz. Harika yardım. Teşekkürler.
Arun Thundyill Saseendran

Durumunuza bağlı olarak büyük olasılıkla değişiklik gösterecektir, ancak AWS SDK ile kutudan çıkarılan son derece ayrıntılı günlük kaydını devre dışı bırakmak için, işe yarayan tek seçenek budur.
Matt Baker

11

Bu öğrenmek için çok uzun sürdü, ama JWebUnit ile birlikte geliyor Logback günlüğü bileşeni, hatta kullanmaz bu yüzden log4j.propertiesya commons-logging.properties.

Bunun yerine, adlı bir dosya oluşturun logback.xmlve bunu kaynak kod klasörünüze yerleştirin (benim durumumda 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>

Logback hala geliştirme aşamasında görünüyor ve API hala değişiyor gibi görünüyor, bu nedenle bu kod örneği gelecekte başarısız olabilir. Ayrıca bu StackOverflow sorusuna bakın .


1
Sen güzelsin. Bu şey yüzünden neredeyse bir kediyi öldürüyordum. Beni deli ediyordu.
Manish Patel

Bu benim için çözümdü. Sanırım bunun nedeni, geçişli olarak dahil ettiğim diğer kitaplıkların logback'i içermesi, bu yüzden bu kaydediciye kilitlendi.
Nathan

10

JUnit ile RestAssured kullanırken bu sorunu yaşadım. Benim için bu programatik yaklaşım işe yaradı:

@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
Harika, benim için işe yarayan tek çözüm. Çok teşekkürler.
lasote

Teşekkür ederim! Test yönteminin başlangıcında aynı kodu kullanıyordu, hiçbir şey yapmadı. Kendi başına @Beforeveya @BeforeClassişlevine yerleştirmek çok güzel çalıştı.
ExactaBox

8

Günlük çıktımızı yapılandırmak için bir özellikler dosyası yerine XML kullanıyoruz. Aşağıdaki kod, bu konuşmayı susturmak için çalıştı.

<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 dosyanızda - aşağıda yaptığım gibi bu küme var org.apache.httpmı ve dosyada başka kaydedici ayarlanmadı mı?

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

Ayrıca org.apache.http, log4j özellikler dosyanızda belirtilmiş herhangi bir günlük düzeyi yoksa , log4j.rootLoggerdüzeyi devralır . Öyleyse, log4j.rootLoggerERROR diyelim ve org.apache.httplog4j.properties'inizdeki ERRORmesajları yalnızca miras yoluyla günlüğe kaydetmesi gereken ayarları çıkaralım .

GÜNCELLEME:

Bir commons-logging.propertiesdosya oluşturun ve ona aşağıdaki satırı ekleyin. Ayrıca bu dosyanın CLASSPATH'ınızda olduğundan emin olun.

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

Tamamlanmış bir log4j dosyası ve OP için onu çağıracak kod eklendi. Bu log4j.properties, CLASSPATH'inizde olmalıdır. Şu an için standart olduğunu varsayıyorum.

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

Günlükçüyü çağırmak için sınıfınıza eklemeniz gereken bazı kodlar.

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'i kullanmaya çalışmadan önce log4j.properties dosyasına ihtiyacım yoktu. Satırlarınızı src / test / resources / log4j.properties dosyama koymayı denedim ama herhangi bir fark yaratmadı. Log4j.properties dosyasında commons.logging seçeneklerini koymak doğru mu?
Matt Baker

Evet, ortak günlük kaydı sadece log4j etrafındaki bir sarmalayıcıdır. Test sınıfınızdaki kaydediciyi nasıl çağırırsınız?
CoolBeans

(Güncellemenizden sonra), log4j.properties dosyamdaki tek satırın yukarıdaki satır olması ve yine de her şeyi tükürmesi için yaptım.
Matt Baker

1
Günlükçüyü çağırmıyorum, HttpClient bunu kendi başına yapıyor.
Matt Baker

Sağladığınız bağlantıda "Not: Log4j, HttpClient dağıtımına dahil değildir." Bu yüzden kesinlikle CLASSPATH'ınıza eklemeniz gerekiyor. Çıktıyı stdout'ta mı (konsol) yoksa bir günlük dosyasında mı görüyorsunuz? Sizin için onu çağırmak için kod içeren örnek bir log4h dosyası oluşturacağım.
CoolBeans

4

Basit yol Log4j ve HttpCLient (bu durumda v3.1, daha yüksek için çalışmalı, küçük değişiklikler gerektirebilir)

Tüm bağımlılıkların doğru olduğundan ve indirmelerinizin MD5 olduğundan emin olun !!!!

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();

Metoda yerleştirmeli miyim main?
parsecer

@parsecer you can
WiR3D

4

Bir süredir aynı sorunla uğraşıyorum ve sonunda buna bakmaya karar verdim. Sorun şu ki, projem kendi içinde bir log4j.xml dosyası içeren http-builder-0.5.2.jar'a bağımlıydı. Ve tabii ki, org.apache.http.wire için günlük düzeyi HATA AYIKLA! Bunu bulmamın yolu, bağımlılıklarımdaki tüm jar dosyalarını gözden geçirmek ve "jar tvf" yapmak ve log4j için grepping yapmaktı.

Bu keşif, http-oluşturucu bağımlılığımın sürümünü 0.6'ya yükseltmenin nihai çözümüne yol açsa da, log4j.xml dosyasını jar dosyasında paketlerken geliştiricinin aklından geçenleri hala şaşırttı. Her neyse, muhtemelen şimdilik bu konu ile alakalı değil. Ancak, daha önce bir çözüm ararken, benimkinin hiç ortaya çıkmadığını düşünürsek, bulduğum bu çözümden bahsetmenin faydalı olacağını düşündüm. Umarım birisi bunu faydalı bulacaktır.


Kullanırken benzer sorun <!-- 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>. Bağımlılık kaldırıldı ve günlükler gitti. Teşekkür ederim!
adom

3

JWebUnit ile aynı sorunu yaşadım. İkili dağıtım kullanıyorsanız, Logback'in varsayılan bir günlük kaydedici olduğunu lütfen unutmayın. Log4j'yi JWebUnit ile kullanmak için aşağıdaki adımları gerçekleştirdim:

  • Logback kavanozları kaldırıldı
  • sfl4j için lod4j köprü kitaplığı ekle - slf4j-log4j12-1.6.4.jar
  • log4j.properties ekle

Muhtemelen Logback kavanozlarını kaldırmanız gerekmez, ancak slf4j'yi log4j kullanmaya zorlamak için bazı ek adımlara ihtiyacınız olacaktır.


Teşekkürler, OpenRdf kullanırken aynı sorunu yaşadım. Bu iş parçacığındaki diğer tüm ipuçlarının, logback kavanozlarını kaldırana kadar hiçbir etkisi yok gibiydi, şimdi günlük oldukça sessiz.
amarillion

3

Aşağıdaki 2 satır sorunumu tamamen çözdü:

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

Bu benim için de çalıştı, ama ihtiyacım yoktu: Logger.getLogger ("org.apache.commons.httpclient"). SetLevel (Level.ERROR);
Jamel Toms

3

Log4j özellik dosyasına aşağıdaki satırları ekleyin ve http günlüklerini kapatacaktır: - log4j.logger.org.apache.http = OFF


birim testlerinde (eğer ana ise, o zaman ana olarak) @BeforeClass public static void BeforeClass() { PropertyConfigurator.configure("log4j.properties"); ...}log4j.properties dosyasını da tek satırlık log4j.logger.org.apache.http = OFF kökte olmalıdır (src klasörünün hemen üstünde)
Sasha Bond

3

Ben de aynı sorunu yaşıyordum. [main] DEBUG org.apache.http.wireTestler yapılırken tüm konsol doldu .

Benim için işe yarayan çözüm , https://github.com/bonigarcia/webdrivermanager-examples/blob/master/src/test/resources gibi bir logback-test.xml src / test / resources / logback-test.xml oluşturmaktı . /logback-test.xml (ref - https://github.com/bonigarcia/webdrivermanager/issues/203 )

Günlük bilgilerimi görüntülemek için, logger name = "io.github.bonigarcia" yerine paket adımı koydum

<?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

Benzer bir problem için çözüm ararken bu yazıya yönlendirildim. Tim'in cevabı çok yardımcı oldu. Matt Baker gibi, ben sadece httpClient günlüğünü çok fazla yapılandırma olmadan kapatmak istiyorum. Ortak günlüğe kaydetme altında hangi günlük uygulamasının kullanıldığından emin olmadığımız için benim çözümüm, sınıf yoluna log4j jar dosyası atarak bunu log4j kullanarak zorlamaktı. Log4j yapılandırmasının varsayılan ayarı, ortak httpclient hata ayıklama çıktısını kapatır. Elbette, daha sağlam hale getirmek için, günlük kaydı yapılandırmalarınızı daha ayrıntılı tanımlamak için common-logging.properties ve log4j.properties dosyaları oluşturabilirsiniz.


2

Koymayı dene

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

sizin commons-logging.properties içinde


2

Apache 4.5.3 için, tüm apache http istemci kaydı için seviyesine taşımak istiyorsanız uyar , kullanım:

log4j.logger.org.apache=WARN

2

sınıf kök yoluna "logback.xml" eklenmesi ve ayarın altında olması benim için çalışıyor.

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

1

Jwebunit entegrasyon testlerini çalıştırırken de aynı sorunu yaşadım. Logback'i hariç tutarak ve slf4j-log4j12 ekleyerek düzelttim, şöyle:

<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

Bunu bir kez anlamam yıllar aldı, buna ihtiyacın var:

log4j.logger.httpclient.wire=ERROR

HttpClient'in günlük kaydedici adı olarak "org.apache.commons.httpclient" yerine "httpclient.wire" kullandığını tahmin ediyorum.

Sinsi herifler.


1

Bu benim için çalıştı.

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

Bulduğum en iyi çözüm, ortak günlük kaydının tamamen kullanılmasını önlemek için maven uygulayıcı eklentisini kullanmaktı. Sonra bunun yerine günlük kaydı için slf4j bağımlılığını ekledim. Aşağıdakileri pom.xml dosyanıza ekleyin

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

ve ayrıca maven-uygulayıcı eklentisini ekleyin

<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
parsecer

0

HttpComponentsClientHttpRequestFactory'yi dinlenme şablonum için ayarladıktan sonra böyle bir sorunla karşılaştım.

OkHttpClientHttpRequestFactory'nin ayarlanması çöp günlüğü ile ilgili sorunu çözmelidir.


0

Bu iki bağımlılığı pom dosyasına eklemeniz yeterlidir: Daha önce tartışmayı denedikten sonra denedim ve başardım.

<!--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>

Commons-Logging -> Logback ve Debug sırasında varsayılan Bilgi mevcut olmayacak; Kullanabilirsiniz:

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

günlüğe kaydetmek istediğiniz bilgileri tanımlamak için: Bunun gibi Son Sonuç gibi. Yalnızca günlüğe kaydetmek istediğim bilgiler mevcut olacak.


0

Yukarıdaki tüm çözümleri boşuna denedim. Benim için en yakın olan tek çözüm, logback.xml oluşturmayı öneren şeydi. Bu işe yaradı, ancak hiçbir şey kaydedilmedi. Logback.xml ile oynadıktan sonra, bu sonuçla karşılaştım

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

Şimdi DEBUG altındaki tüm seviyeler doğru şekilde kaydedilir.


0

İle:

  • Log2J 2 2.11.2
  • HttpClient 4.5.7 (elasticsearch 7.0.0 dinlenme istemcisi)
  • Yapılandırmak için özellikler dosyasını kullanma

Eklenebilir:

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

Yukarıdaki örnekte 'httpclient' seçtiğiniz mantıksal bir addır.

(Java 11 OpenFX uygulamasında test edilmiştir.)


0

Benim durumumda xml yapılandırmasını kullanıyorum ve bunu yapılandırma dosyasına ekliyorum

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


0

Benim için log4j prop dosyasındaki aşağıdaki satırlar, HttpClient günlüğünden gelen tüm karışıklıkları temizledi ... Yaşasın !!! :)

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.