Nonaktifkan logging HttpClient

133

Saya menggunakan commons-httpclient 3.1 dalam suite uji integrasi. Pencatatan default untuk HttpClient sangat bising dan sepertinya saya tidak bisa mematikannya. Saya sudah mencoba mengikuti instruksi sini tetapi tidak ada yang membuat perbedaan.

Kebanyakan saya hanya perlu membuat logger org.apache.http.wire diam. Bagian dari masalahnya adalah bahwa saya tidak tahu jenis logger apa yang coba digunakan oleh HttpClient dan sebagian besar masalahnya adalah saya belum pernah menggunakan perpustakaan ini sebelumnya. Saya mencoba membuat file log4j.properties dan menjatuhkannya di folder test / resources saya, memodifikasi file master logging.properties di jre / lib, dan mengirimkan berbagai opsi logging ke Maven seperti yang ditentukan pada halaman logging , dan tidak satupun dari mereka membuat perbedaan apa pun.

Setiap bantuan dihargai ... ini membuat saya gila.

UPDATE: Sebuah koreksi: sepertinya output yang dimaksud sebenarnya berasal dari penggunaan jwebunit tentang HttpClient, bukan milik saya. Either way, itu tidak diinginkan.

PEMBARUAN: Terima kasih atas upaya sejauh ini. Saya sudah mencoba semua yang disarankan di bawah ini tetapi masih belum berhasil. Saya memiliki file commons-logging.properties di folder src / test / resources saya dengan konten berikut

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

dan file log4j.properties di folder yang sama dengan konten berikut

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

Namun, ketika saya menjalankan tes saya, saya masih mendapatkan banyak output seperti ini:

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

Output ini untuk semua yang ada di kawat membuat perpustakaan ini tidak dapat digunakan untuk saya ... itu sampai saya bisa mencari cara mematikannya. Apakah ada hal khusus yang perlu saya lakukan untuk mendapatkan konfigurasi log ini dibaca?

Matt Baker
sumber
Untuk semua masalah ini: pastikan untuk menambahkan -Dlog4j.debugopsi VM Anda untuk memastikan bahwa file konfigurasi yang tepat dimuat
Tommy
3
Lihat stackoverflow.com/questions/1436761/… . Untuk kutipan: public class Main { static { System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); } // Rest of class as before }
PVS
3
Apakah ini pernah diselesaikan untuk OP. Masalah sebenarnya ini membunuhku.
Collin Bell
2
Apakah ini terpecahkan? Mencoba membagikan jawaban, tidak beruntung.
Markvds

Jawaban:

85

Pembaruan log4j.propertiesuntuk menyertakan:

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

Perhatikan bahwa jika pustaka Log4j tidak diinstal, HttpClient (dan karenanya JWebUnit) akan menggunakan logback. Dalam situasi ini, buat atau edit logback.xmluntuk memasukkan:

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

Menetapkan tingkat log untuk WARNdengan Log4j menggunakan nama paket org.apache.commons.httpclientdi log4j.properties tidak akan bekerja seperti yang diharapkan:

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

Ini karena sumber untuk HttpClient (v3.1) menggunakan nama log berikut:

public static Wire HEADER_WIRE = new Wire(LogFactory.getLog("httpclient.wire.header"));
public static Wire CONTENT_WIRE = new Wire(LogFactory.getLog("httpclient.wire.content"));
Sud Monkey
sumber
19
Di sumber 4.2.1, nama lognya adalah: "org.apache.http.headers" dan "org.apache.http.wire", meskipun bahkan menggunakannya, logging apache yang berisik sepertinya tidak akan mematikan untuk saya .
Tinclon
Terima kasih!!! Juga: Jika Anda memiliki masalah ini di suatu tempat dalam kode Anda sendiri, di mana Anda menggunakan httpclient dan belum menggunakan Log4j: Ingat juga untuk memasukkan botol log4j di classpath ...
FelixD
30

Catatan: Beberapa jawaban ini mungkin mengulangi hal-hal yang sudah Anda ketahui (atau pikir Anda tahu), tetapi ada sedikit informasi yang salah mengenai pertanyaan ini, jadi saya akan mulai dari awal dan mengeja semuanya

  • Commons HttpClient menggunakan Commons-Logging untuk semua kebutuhan loggingnya.
  • Commons-Logging bukan kerangka penebangan penuh, tetapi lebih merupakan pembungkus beberapa kerangka penebangan yang ada
  • Itu berarti bahwa ketika Anda ingin mengontrol output logging, Anda (kebanyakan) akhirnya mengkonfigurasi perpustakaan selain Commons-Logging, tetapi karena Commons-Logging membungkus beberapa perpustakaan lain, sulit bagi kami untuk menebak yang mana untuk dikonfigurasikan tanpa mengetahui pengaturan persis Anda.
  • Commons-Logging dapat masuk ke log4j, tetapi juga bisa masuk ke java.util.logging(JDK1.4 logging)
  • Commons-Logging mencoba menjadi pintar dan menebak kerangka logging mana yang sudah Anda gunakan, dan mengirimkan log-nya.
  • Jika Anda belum memiliki kerangka kerja logging, dan berjalan pada JRE yang 1,4 atau di atas (yang seharusnya) maka mungkin akan mengirim pesan log ke JDK logging ( java.util.logging)
  • Mengandalkan mekanisme autodiscovery Commons-Logging cenderung kesalahan. Cukup menambahkan log4j.jarke classpath akan membuatnya beralih mekanisme logging yang digunakannya, yang mungkin bukan yang Anda inginkan
  • Lebih baik bagi Anda untuk secara eksplisit memberitahu Commons-Logging perpustakaan logging yang digunakan
  • Anda dapat melakukan ini dengan membuat commons-logging.propertiesfile sesuai instruksi ini
  • Langkah-langkah yang ingin Anda ikuti untuk mengkonfigurasi pencatatan log commons-httpclient adalah
    1. Tentukan kerangka kerja logging yang mendasari yang ingin Anda gunakan. Ada sejumlah pilihan, tetapi mungkin log4jatau java.util.loggingmerupakan pilihan terbaik untuk Anda.
    2. Setel file properti pencatatan umum untuk menunjuk ke Logimplementasi yang benar . misalnya untuk menggunakan log4j, masukkan ini ke file properti:, org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLoggeratau untuk menggunakan set logging JDK org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger. Ini juga dapat ditetapkan sebagai properti sistem (misalnya menggunakan -Dpada baris perintah).
    3. Konfigurasikan implementasi logging yang mendasarinya (mis. Log4j) untuk mengabaikan pesan yang tidak Anda inginkan, dan menampilkan pesan yang Anda inginkan.

Itu banyak langkah, tapi itu yang dibutuhkan. Para pengembang di Apache-commons cenderung berasumsi bahwa Anda sudah memiliki kerangka kerja logging yang dikonfigurasi, dan mereka dapat menentukan yang mana itu dengan penemuan otomatis.
Jika itu tidak benar untuk Anda, maka itu cenderung lebih banyak pekerjaan untuk membuat semuanya berjalan.

Tim
sumber
1
Ini informasi yang sangat berguna; Saya benar-benar merasa harus ditambahkan ke halaman ini . Apakah Anda menulisnya hanya untuk ini?
natem345
1
Sobat, jawaban ini bagus, tetapi saya gagal membuatnya bekerja. Saya menggunakan Dropwizard, dan saya mencoba semua yang Anda sebutkan, tetapi tidak berhasil: '(
Vic Seedoubleyew
19

Saya memasukkan ini ke file konfigurasi log4j saya

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

Ini membatasi output ke level Peringatan atau lebih tinggi

Philip Nuzhnyy
sumber
19

Ini berhasil untuk pengujian saya;

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");
Daniel Magnusson
sumber
18

Untuk log4j, tambahkan berikut ini ke log4j.properties(dalam sourcedirektori aplikasi ):

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

Untuk logback, berikut ini logback.xmlakan menghilangkan kebisingan:

<configuration>
    <logger name="org.apache" level="WARN" />
    <logger name="httpclient" level="WARN" /> 
</configuration>
Ali Cheaito
sumber
1
Saya menggunakan log4j. Menambahkan dua baris pertama dalam pemecah log masalah saya sepenuhnya. Semua pesan log saya yang lain muncul sesuai dengan level yang saya atur. Sedangkan log apache tidak. Sangat membantu. Terima kasih.
Arun Thundyill Saseendran
Ini mungkin akan bervariasi tergantung pada situasi Anda, tetapi untuk menonaktifkan logging sangat verbose diaktifkan di luar kotak dengan AWS SDK, ini adalah satu-satunya yang bekerja.
Matt Baker
11

Butuh waktu terlalu lama untuk mengetahuinya, tetapi JWebUnit dibundel dengan komponen Logback logging, sehingga bahkan tidak akan menggunakan log4j.propertiesatau commons-logging.properties.

Sebagai gantinya, buat file bernama logback.xmldan letakkan di folder kode sumber Anda (dalam kasus saya, 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 tampaknya masih dalam pengembangan dan API tampaknya masih berubah, sehingga sampel kode ini mungkin gagal di masa mendatang. Lihat juga pertanyaan StackOverflow ini .

jevon
sumber
1
Kamu cantik. Saya hampir membunuh kucing karena hal ini. Itu membuatku gila.
Manish Patel
Ini solusi untuk saya. Saya pikir itu karena perpustakaan lain saya termasuk logback dimasukkan secara transitif, jadi itu terkunci ke logger ini.
Nathan
10

Saya punya masalah ini saat menggunakan RestAssured dengan JUnit. Bagi saya pendekatan programatik ini berhasil:

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

    //...
}
tanacsg
sumber
2
Fantastis, satu-satunya solusi yang berhasil bagi saya. Terima kasih banyak.
lasote
Terima kasih! Menggunakan kode yang sama persis pada awal metode pengujian, tidak melakukan apa pun. Menempatkannya sendiri @Beforeatau @BeforeClassfungsinya bekerja dengan indah.
ExactaBox
8

Kami menggunakan XML, alih-alih file properti, untuk mengonfigurasi keluaran logging kami. Kode berikut berfungsi untuk membungkam obrolan ini.

<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>
barclay
sumber
4

Di properti log4.prop Anda - apakah Anda memiliki set ini seperti yang saya lakukan di bawah ini dan tidak ada org.apache.httppenebang lain yang diatur dalam file?

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

Juga jika Anda tidak memiliki level log yang ditentukan org.apache.httpdalam file properti log4j Anda maka itu akan mewarisi log4j.rootLoggerlevel tersebut. Jadi jika Anda telah log4j.rootLoggermengatur untuk katakanlah KESALAHAN dan mengambil org.apache.httppengaturan di log4j.properties Anda yang seharusnya membuatnya hanya loginERROR pesan hanya dengan warisan.

MEMPERBARUI:

Buat commons-logging.propertiesfile dan tambahkan baris berikut untuk itu. Pastikan juga file ini ada di CLASSPATH Anda.

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

Menambahkan file log4j yang lengkap dan kode untuk memintanya untuk OP. Log4j.properties ini harus di CLASSPATH Anda. Saya mengasumsikan stdout untuk saat ini.

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

Berikut adalah beberapa kode yang perlu Anda tambahkan ke kelas Anda untuk memanggil logger.

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
}
CoolBeans
sumber
Saya tidak membutuhkan file log4j.properties sebelum mencoba menggunakan HttpClient. Saya mencoba meletakkan baris Anda di file src / test / resources / log4j.properties saya tetapi tidak ada bedanya. Apakah benar untuk meletakkan opsi commons.logging di log4j.properties?
Matt Baker
Ya penebangan commons hanyalah pembungkus di sekitar log4j. Bagaimana Anda memanggil logger di kelas tes Anda?
CoolBeans
(Setelah pembaruan Anda) saya membuatnya sehingga baris di atas adalah satu-satunya di file log4j.properties saya dan masih memuntahkan semuanya.
Matt Baker
1
Saya tidak meminta logger, HttpClient melakukannya sendiri.
Matt Baker
Ia mengatakan pada tautan yang Anda berikan bahwa - "Catatan: Log4j tidak termasuk dalam distribusi HttpClient." Jadi Anda pasti perlu menambahkannya ke CLASSPATH Anda. Apakah Anda melihat output di stdout (konsol) atau dalam file log? Saya akan membuat sampel file log4h dengan kode untuk memohonnya untuk Anda.
CoolBeans
4

Cara sederhana Log4j dan HttpCLient (v3.1 dalam hal ini, harus bekerja untuk yang lebih tinggi, bisa memerlukan perubahan kecil)

Pastikan semua dependensi sudah benar, dan MD5 unduhan Anda !!!!

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();
WiR3D
sumber
Haruskah saya letakkan di mainmetode?
parsecer
@parsecer Anda bisa
WiR3D
4

Saya telah diganggu oleh masalah yang sama untuk beberapa waktu sekarang dan akhirnya memutuskan untuk menyelidiki hal ini. Ternyata masalahnya adalah bahwa proyek saya memiliki ketergantungan pada http-builder-0.5.2.jar yang membundel file log4j.xml dalam dirinya sendiri. Dan tentu saja, level log untuk org.apache.http.wire adalah DEBUG! Cara saya menemukan itu hanya untuk pergi melalui semua file jar di dependensi saya dan melakukan "jar tvf" dan mengambil log4j.

Sementara penemuan ini mengarah pada solusi akhirnya meningkatkan versi ketergantungan http-builder saya menjadi 0,6, masih membingungkan saya apa yang pasti ada dalam pikiran pengembang ketika menggabungkan file log4j.xml ke dalam file jar. Bagaimanapun, itu mungkin tidak relevan dengan utas ini untuk saat ini. Tapi saya pikir itu berguna untuk menyebutkan solusi yang saya temukan mengingat ketika saya sedang mencari solusi sebelum sekarang, solusi saya tidak pernah muncul. Semoga seseorang akan menemukan ini berguna.

paulito415
sumber
Masalah serupa saat menggunakan <!-- 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>. Menghapus ketergantungan dan log hilang. Terima kasih!
Adom
3

Saya memiliki masalah yang sama dengan JWebUnit. Harap perhatikan bahwa jika Anda menggunakan distribusi biner maka Logback adalah logger default. Untuk menggunakan log4j dengan JWebUnit saya melakukan langkah-langkah berikut:

  • menghapus stoples Logback
  • tambahkan perpustakaan jembatan lod4j untuk sfl4j - slf4j-log4j12-1.6.4.jar
  • tambahkan log4j.properties

Mungkin Anda tidak harus menghapus guci Logback tetapi Anda akan memerlukan beberapa langkah tambahan untuk memaksa slf4j untuk menggunakan log4j

Lukasz Lacki
sumber
Terima kasih, saya memiliki masalah yang sama ketika menggunakan OpenRdf. Semua tips lain di utas ini tampaknya tidak berpengaruh sampai saya menghapus stoples logback, sekarang lognya tenang.
amarillion
3

2 baris berikut menyelesaikan masalah saya sepenuhnya:

Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.ERROR);
Logger.getLogger("httpclient").setLevel(Level.ERROR);
Tosha
sumber
Ini bekerja untuk saya juga, tetapi saya tidak memerlukan: Logger.getLogger ("org.apache.commons.httpclient"). SetLevel (Level.ERROR);
Jamel Toms
3

Tambahkan baris di bawah ini dalam file properti log4j dan itu akan menutup log http: - log4j.logger.org.apache.http = OFF

Rancho
sumber
dalam tes unit (jika utama, kemudian di utama) juga menambahkan @BeforeClass public static void BeforeClass() { PropertyConfigurator.configure("log4j.properties"); ...}file log4j.properties dengan baris tunggal log4j.logger.org.apache.http = OFF harus di root (tepat di atas folder src)
Sasha Bond
3

Saya juga mengalami masalah yang sama. Seluruh konsol dipenuhi [main] DEBUG org.apache.http.wiresaat menjalankan tes.

Solusi yang berhasil bagi saya adalah membuat logback-test.xml src / test / resources / logback-test.xml seperti di https://github.com/bonigarcia/webdrivermanager-examples/blob/master/src/test/resources /logback-test.xml (ref - https://github.com/bonigarcia/webdrivermanager/issues/203 )

Untuk melihat info logging saya, saya mengganti nama logger = "io.github.bonigarcia" dengan nama paket saya

<?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>
nantitv
sumber
2

Saya dituntun ke pos ini ketika mencari solusi untuk masalah yang sama. Jawaban Tim sangat membantu. seperti Matt Baker, saya hanya ingin mematikan log httpClient tanpa terlalu banyak konfigurasi. Karena kami tidak yakin implementasi logging yang mana di bawah common-logging digunakan, solusi saya adalah memaksanya menggunakan log4j dengan melemparkan file jar log4j di jalur kelas. Pengaturan default konfigurasi log4j mematikan output debug umum-httpclient. Tentu saja, untuk membuatnya lebih kuat, Anda dapat membuat file common-logging.properties dan log4j.properties untuk lebih menentukan konfigurasi logging Anda.

bcxw
sumber
2

Coba pasang

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

di properti Anda.logging.properti

Amankan
sumber
2

Untuk apache 4.5.3, jika Anda ingin memindahkan level untuk semua klien http apache login ke Peringatkan , gunakan:

log4j.logger.org.apache=WARN
Adrian Elder
sumber
2

itu bekerja untuk saya dengan menambahkan "logback.xml" di jalur root kelas dan pengaturan di bawah ini.

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

Saya punya masalah yang sama ketika menjalankan tes integrasi jwebunit. Saya memperbaikinya dengan mengecualikan logback dan menambahkan di slf4j-log4j12, seperti:

<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>
David Pomeroy
sumber
1

Ini butuh waktu lama bagi saya untuk mengetahui sekali, Anda membutuhkan ini:

log4j.logger.httpclient.wire=ERROR

Saya kira HttpClient menggunakan "httpclient.wire" sebagai nama logger-nya, bukan "org.apache.commons.httpclient".

Pengacau licik.

Adriaan Koster
sumber
1

Ini berhasil untuk saya.

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");
irlatech
sumber
0

Solusi terbaik yang saya temukan adalah menggunakan plugin pakar penegakan hukum untuk mencegah penebangan bersama digunakan secara bersamaan. Kemudian saya menambahkan dependensi slf4j sebagai gantinya. Jadi tambahkan berikut ini ke pom.xml Anda

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

dan juga menambahkan plugin pakar-penegak

<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>
Big Daddy Software Man
sumber
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

Saya mengalami masalah seperti itu setelah mengatur HttpComponentsClientHttpRequestFactory untuk templat sisanya.

Pengaturan OkHttpClientHttpRequestFactory harus menyelesaikan masalah dengan trash logging.

sann05
sumber
0

Cukup tambahkan dua dependensi ini di file pom: Saya telah mencoba dan berhasil setelah mencoba diskusi sebelumnya.

<!--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 dan Info default sementara Debug tidak akan hadir; Kamu bisa memakai:

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

untuk menentukan informasi yang ingin Anda catat: seperti Hasil Akhir seperti ini. Hanya informasi yang ingin saya catat yang akan hadir.

Herman XU
sumber
0

Saya mencoba semua solusi di atas tetapi tidak berhasil. Satu pertanyaan yang paling mendekati saya adalah saran untuk membuat logback.xml. Itu berhasil, namun tidak ada yang dicatat. Setelah bermain-main dengan logback.xml, inilah yang akhirnya saya dapatkan

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

Sekarang Semua level di bawah DEBUG dicatat dengan benar.

agaton
sumber
0

Dengan:

  • Log2J 2 2.11.2
  • HttpClient 4.5.7 (klien sisanya elasticsearch 7.0.0)
  • Menggunakan file properti untuk mengonfigurasi

Satu dapat menambahkan:

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

Dengan 'httpclient' pada contoh di atas menjadi nama logis yang Anda pilih.

(Diuji pada aplikasi Java 11 OpenFX.)

Imifos
sumber
0

Dalam kasus saya, saya menggunakan konfigurasi xml, dan saya menambahkan ini ke file konfigurasi

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

Coba 'log4j.logger.org.apache.http.headers = ERROR'

Fracdroid
sumber
0

Bagi saya, baris di bawah ini dalam file prop log4j membersihkan semua kekacauan yang berasal dari HttpClient logging ... Hore !!! :)

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
Dilip Muthukurussimana
sumber