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?
sumber
-Dlog4j.debug
opsi VM Anda untuk memastikan bahwa file konfigurasi yang tepat dimuatpublic class Main { static { System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); } // Rest of class as before }
Jawaban:
Pembaruan
log4j.properties
untuk menyertakan:Perhatikan bahwa jika pustaka Log4j tidak diinstal, HttpClient (dan karenanya JWebUnit) akan menggunakan logback. Dalam situasi ini, buat atau edit
logback.xml
untuk memasukkan:Menetapkan tingkat log untuk
WARN
dengan Log4j menggunakan nama paketorg.apache.commons.httpclient
dilog4j.properties
tidak akan bekerja seperti yang diharapkan:Ini karena sumber untuk HttpClient (v3.1) menggunakan nama log berikut:
sumber
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
java.util.logging
(JDK1.4 logging)java.util.logging
)log4j.jar
ke classpath akan membuatnya beralih mekanisme logging yang digunakannya, yang mungkin bukan yang Anda inginkancommons-logging.properties
file sesuai instruksi inilog4j
ataujava.util.logging
merupakan pilihan terbaik untuk Anda.Log
implementasi yang benar . misalnya untuk menggunakan log4j, masukkan ini ke file properti:,org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
atau untuk menggunakan set logging JDKorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
. Ini juga dapat ditetapkan sebagai properti sistem (misalnya menggunakan-D
pada baris perintah).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.
sumber
Saya memasukkan ini ke file konfigurasi log4j saya
Ini membatasi output ke level Peringatan atau lebih tinggi
sumber
Ini berhasil untuk pengujian saya;
sumber
Untuk log4j, tambahkan berikut ini ke
log4j.properties
(dalamsource
direktori aplikasi ):Untuk logback, berikut ini
logback.xml
akan menghilangkan kebisingan:sumber
Butuh waktu terlalu lama untuk mengetahuinya, tetapi JWebUnit dibundel dengan komponen Logback logging, sehingga bahkan tidak akan menggunakan
log4j.properties
ataucommons-logging.properties
.Sebagai gantinya, buat file bernama
logback.xml
dan letakkan di folder kode sumber Anda (dalam kasus saya,src
):Logback tampaknya masih dalam pengembangan dan API tampaknya masih berubah, sehingga sampel kode ini mungkin gagal di masa mendatang. Lihat juga pertanyaan StackOverflow ini .
sumber
Saya punya masalah ini saat menggunakan RestAssured dengan JUnit. Bagi saya pendekatan programatik ini berhasil:
sumber
@Before
atau@BeforeClass
fungsinya bekerja dengan indah.Kami menggunakan XML, alih-alih file properti, untuk mengonfigurasi keluaran logging kami. Kode berikut berfungsi untuk membungkam obrolan ini.
sumber
Di properti log4.prop Anda - apakah Anda memiliki set ini seperti yang saya lakukan di bawah ini dan tidak ada
org.apache.http
penebang lain yang diatur dalam file?Juga jika Anda tidak memiliki level log yang ditentukan
org.apache.http
dalam file properti log4j Anda maka itu akan mewarisilog4j.rootLogger
level tersebut. Jadi jika Anda telahlog4j.rootLogger
mengatur untuk katakanlah KESALAHAN dan mengambilorg.apache.http
pengaturan di log4j.properties Anda yang seharusnya membuatnya hanya loginERROR
pesan hanya dengan warisan.MEMPERBARUI:
Buat
commons-logging.properties
file dan tambahkan baris berikut untuk itu. Pastikan juga file ini ada di CLASSPATH Anda.Menambahkan file log4j yang lengkap dan kode untuk memintanya untuk OP. Log4j.properties ini harus di CLASSPATH Anda. Saya mengasumsikan stdout untuk saat ini.
Berikut adalah beberapa kode yang perlu Anda tambahkan ke kelas Anda untuk memanggil logger.
sumber
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 !!!!
sumber
main
metode?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.
sumber
<!-- 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!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:
Mungkin Anda tidak harus menghapus guci Logback tetapi Anda akan memerlukan beberapa langkah tambahan untuk memaksa slf4j untuk menggunakan log4j
sumber
2 baris berikut menyelesaikan masalah saya sepenuhnya:
sumber
Tambahkan baris di bawah ini dalam file properti log4j dan itu akan menutup log http: - log4j.logger.org.apache.http = OFF
sumber
@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)Saya juga mengalami masalah yang sama. Seluruh konsol dipenuhi
[main] DEBUG org.apache.http.wire
saat 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
sumber
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.
sumber
Coba pasang
di properti Anda.logging.properti
sumber
Untuk apache 4.5.3, jika Anda ingin memindahkan level untuk semua klien http apache login ke Peringatkan , gunakan:
sumber
itu bekerja untuk saya dengan menambahkan "logback.xml" di jalur root kelas dan pengaturan di bawah ini.
sumber
Saya punya masalah yang sama ketika menjalankan tes integrasi jwebunit. Saya memperbaikinya dengan mengecualikan logback dan menambahkan di slf4j-log4j12, seperti:
sumber
Ini butuh waktu lama bagi saya untuk mengetahui sekali, Anda membutuhkan ini:
Saya kira HttpClient menggunakan "httpclient.wire" sebagai nama logger-nya, bukan "org.apache.commons.httpclient".
Pengacau licik.
sumber
Ini berhasil untuk saya.
sumber
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
dan juga menambahkan plugin pakar-penegak
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
Saya mengalami masalah seperti itu setelah mengatur HttpComponentsClientHttpRequestFactory untuk templat sisanya.
Pengaturan OkHttpClientHttpRequestFactory harus menyelesaikan masalah dengan trash logging.
sumber
Cukup tambahkan dua dependensi ini di file pom: Saya telah mencoba dan berhasil setelah mencoba diskusi sebelumnya.
Commons-Logging -> Logback dan Info default sementara Debug tidak akan hadir; Kamu bisa memakai:
untuk menentukan informasi yang ingin Anda catat: seperti Hasil Akhir seperti ini. Hanya informasi yang ingin saya catat yang akan hadir.
sumber
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
Sekarang Semua level di bawah DEBUG dicatat dengan benar.
sumber
Dengan:
Satu dapat menambahkan:
Dengan 'httpclient' pada contoh di atas menjadi nama logis yang Anda pilih.
(Diuji pada aplikasi Java 11 OpenFX.)
sumber
Dalam kasus saya, saya menggunakan konfigurasi xml, dan saya menambahkan ini ke file konfigurasi
sumber
Coba 'log4j.logger.org.apache.http.headers = ERROR'
sumber
Bagi saya, baris di bawah ini dalam file prop log4j membersihkan semua kekacauan yang berasal dari HttpClient logging ... Hore !!! :)
sumber