Aplikasi saya akan digunakan pada tcServer dan WebSphere 6.1. Aplikasi ini menggunakan ehCache dan memerlukan slf4j sebagai ketergantungan. Sebagai hasilnya saya menambahkan tabung slf4j-api.jar (1.6) ke bundle file perang saya.
Aplikasi berfungsi dengan baik di tcServer kecuali untuk kesalahan berikut:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Namun, ketika saya menggunakan di WebSphere saya mendapatkan java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder
.
Juga ditemani oleh Failed to load class "org.slf4j.impl.StaticMDCBinder"
Saya telah memeriksa classpath kedua server aplikasi dan tidak ada toples slf4j lainnya.
Adakah yang tahu apa yang mungkin terjadi di sini?
Jawaban:
Saya memiliki masalah yang sama dengan WebSphere 6.1. Seperti yang ditunjukkan Ceki, ada banyak toples yang digunakan WebSphere dan salah satunya menunjuk ke versi slf4j yang lebih lama.
Fallback No-Op hanya terjadi dengan slf4j -1.6+ sehingga apapun yang lebih tua dari itu akan membuang pengecualian dan menghentikan penyebaran Anda.
Ada dokumentasi di situs SLf4J yang menyelesaikan ini. Saya mengikuti itu dan menambahkan
slf4j-simple-1.6.1.jar
ke aplikasi saya bersama denganslf4j-api-1.6.1.jar
yang sudah saya miliki.Ini menyelesaikan masalah saya. Semoga ini bisa membantu orang lain yang memiliki masalah ini.
sumber
Ini untuk mereka yang datang ke sini dari pencarian google.
Jika Anda menggunakan pakar, tambahkan saja yang berikut ini
Atau
sumber
slf4j-simple
tidak menggunakan versi yang samaslf4j-api
? Mereka mungkin akan bekerja sama dengan baik, tetapi saya pikir itu lebih aman dan praktik yang lebih baik secara umum untuk meminta mereka menggunakan versi yang sama. Juga, jika Anda perlu mengaktifkan logging hanya konsol, misalnya, ketika menjalankan tes unit, makaslf4j-simple
tampaknya sudah cukup (itu bagi saya sekalipun).Cukup tambahkan ini ke pom.xml Anda :
sumber
<groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>
dan masalah teratasiAnda perlu menambahkan berikut file jar di classpath Anda:
slf4j-simple-1.6.2.jar
. Jika Anda belum memilikinya, silakan unduh. Silakan merujuk ke http://www.slf4j.org/codes.html#multiple_bindingssumber
jul-to-slf4j
di sayapom.xml
dan baru ditambahkanslf4j-simple
sebelum dan itu berfungsi dengan baik.Beberapa jawaban di sini merekomendasikan untuk menambahkan ketergantungan slf4j-simple ke file maven pom Anda. Anda mungkin ingin memeriksa versi terbaru.
Di https://mvnrepository.com/artifact/org.slf4j/slf4j-simple Anda akan menemukan versi terbaru dari Penjilidan Sederhana SLF4J. Pilih salah satu yang paling cocok untuk Anda (masih 1,7.26 dari 2019-02 adalah versi stabil pada 2019-07) dan memasukkannya ke pom.xml Anda.
Demi kenyamanan Anda, beberapa dependensi ditampilkan di sini - tetapi mungkin tidak diperbarui saat Anda membaca ini!
Versi Alpha 2019-10
Versi Beta Februari 2019
Versi Stabil 2019-12
Saya menghapus bagian tes cakupan berkat komentar di bawah ini.
sumber
<scope>test</scope>
? Dalam pengalaman saya, saya setidaknya perluruntime
ruang lingkup untuk memastikanslf4j-simple
ada di classpath. Ingin tahu bagaimana Anda dapat menggunakan ini hanya dengantest
ruang lingkup ...Saya menghadapi kesalahan yang sama. Saya telah mengkonfigurasi slf4j-api, slf4j-log4j12 dan log4j, dalam pengembangan lokal saya. Semua konfigurasi baik-baik saja, tetapi ketergantungan slf4j-log4j12 yang saya salin dari mvnrepository memiliki cakupan pengujian
<scope>test</scope>
. Ketika saya menghapus ini semua hal baik-baik saja.Beberapa kali kesalahan konyol mematahkan kepala kita;)
sumber
Terkadang kita harus melihat catatan dari warnin
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
.Anda dapat mencari alasan mengapa peringatan ini datang.
Menambahkan satu dari jar dari
*slf4j-nop.jar
,slf4j-simple.jar
,slf4j-log4j12.jar
,slf4j-jdk14.jar
ataulogback-classic.jar*
untuk jalan kelas harus memecahkan masalah.misalnya menambahkan kode di atas ke Anda
build.gradle
atau kode yang sesuaipom.xml
untuk proyek pakar.sumber
letakkan file
slf4j-log4j12-1.6.4.jar
di classpath akan melakukan trik.sumber
Jika Anda menggunakan maven ke manajemen ketergantungan sehingga Anda bisa menambahkan ketergantungan berikut di pom.xml
Untuk pengguna non-Maven Cukup unduh perpustakaan dan masukkan ke classpath proyek Anda.
Di sini Anda dapat melihat detailnya: http://www.mkyong.com/wicket/java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/
sumber
This is not an error. This message tells you that you do not have any logger implementation (such as e.g. Logback) added in classpath, and therefore NOP (No Operation) log
Cari komentar sarxos seperti yang disebutkan oleh @Paul perlu menambahkan logback-klasik. Pendekatan perubahan lain untuk<artifactId>slf4j-simple</artifactId>
dari<artifactId>slf4j-api</artifactId>
juga berhasil. Diilustrasikan di siniSLF4j adalah abstraksi untuk berbagai kerangka kerja logging . Oleh karena itu selain memiliki slf4j Anda perlu memasukkan kerangka logging Anda seperti log4j atau logback (dll) di classpath Anda.
Untuk mendapatkan gagasan, rujuk Langkah Bayi Pertama di http://logback.qos.ch/manual/introduction.html
sumber
Slf4j adalah fasad untuk kerangka kerja logging yang mendasarinya seperti log4j, logback, java.util.logging.
Untuk terhubung dengan kerangka kerja yang mendasarinya, slf4j menggunakan binding.
Kesalahan di atas terlempar jika tabung pengikat terlewatkan. Anda dapat mengunduh toples ini dan menambahkannya ke classpath.
Untuk ketergantungan pakar,
Ketergantungan ini selain slf4j-log4j12-1.7.21.jar, ini akan menarik slf4j-api-1.7.21.jar serta log4j-1.2.17.jar ke proyek Anda
Referensi: http://www.slf4j.org/manual.html
sumber
Saya menghadapi masalah yang sama dengan aplikasi Spring-boot-2 dengan Java 9 library.
Menambahkan ketergantungan berikut di pom.xml saya memecahkan masalah bagi saya:
sumber
Dalam kasus Websphere, Anda memiliki versi slf4j-api.jar, 1.4.x. yang lebih lama atau 1.5.x berbaring di suatu tempat. Perilaku yang Anda amati di tcServer, yang gagal-ke NOP, terjadi pada versi slf4j 1.6.0 dan yang lebih baru. Pastikan Anda menggunakan slf4j-api-1.6.x.jar di semua platform dan tidak ada versi slf4j-api yang lebih lama ditempatkan di jalur kelas.
sumber
Saya masuk ke masalah ini ketika saya mendapatkan kesalahan berikut:
ketika saya menggunakan
slf4j-api-1.7.5.jar
dilibs
.Meskipun saya mencoba dengan seluruh stoples komplemen yang disarankan, seperti
slf4j-log4j12-1.7.5.jar
,slf4j-simple-1.7.5
pesan kesalahan masih ada. Masalahnya akhirnya terpecahkan ketika saya menambahkanslf4j-jdk14-1.7.5.jar
ke java libs.Dapatkan seluruh paket slf4j di http://www.slf4j.org/download.html
sumber
Silakan tambahkan dependensi berikut ke pom untuk menyelesaikan masalah ini.
sumber
Sebagai alternatif inklusi jar dan solusi pakar murni, Anda dapat memasukkannya dari pakar dengan gradle.
Contoh untuk versi
1.7.25
Letakkan ini di dalam dependensi
build.gradle
file Anda .sumber
Saya bekerja di proyek Struts2 + Spring. Jadi perlu ketergantungan
slf4j-api-1.7.5.jar
.Jika saya menjalankan proyek, saya mendapatkan error seperti
Gagal memuat kelas "org.slf4j.impl.StaticLoggerBinder"
Saya memecahkan masalah saya dengan menambahkan
slf4j-log4j12-1.7.5.jar
.Jadi tambahkan toples ini di proyek Anda untuk menyelesaikan masalah.
sumber
Seperti yang dinyatakan dalam Manual SLF4J
dan
Jadi Anda harus memilih ikatan mana yang ingin Anda gunakan.
Pengikatan NoOp (slf4j-nop)
Periksa versi baru di https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav
Ikatan sederhana (slf4j-simple)
Periksa versi baru di https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav
Binding untuk kerangka kerja logging (java.util.logging, logback, log4j)
Anda memerlukan salah satu dari ikatan ini jika Anda ingin menulis log ke file.
Lihat deskripsi dan instruksi di https://www.slf4j.org/manual.html#projectDep
Pendapat saya
Saya akan merekomendasikan Logback karena merupakan pengganti log4j proyek .
Periksa versi terbaru dari pengikatannya di https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav
Anda mendapatkan output konsol di luar kotak tetapi jika Anda perlu menulis log ke file, cukup
FileAppender
konfigurasikan kesrc/main/resources/logback.xml
atau kesrc/test/resources/logback-test.xml
seperti ini:(Lihat deskripsi terperinci dalam manual: https://logback.qos.ch/manual/configuration.html )
sumber
Masukkan ketergantungan yang disebutkan di atas dalam file pom.xml
sumber
Saya menambahkan ketergantungan ini untuk menyelesaikan masalah ini:
sumber
Menurut dokumentasi resmi SLF4J
Cukup tambahkan toples ini bersama dengan slf4j api.jar ke classpath Anda untuk menyelesaikan sesuatu. Semoga berhasil
sumber
Saya menyelesaikannya dengan menambahkan perpustakaan ini: slf4j-simple-1.7.25.jar Anda dapat mengunduh ini di web resmi https://www.slf4j.org/download.html
sumber
mengalami masalah yang sama pada payara 5.191
jcl-over-slf4j bersama dengan slf4j-log4j12 memecahkan masalah
sumber
Saya tahu posting ini agak lama, tetapi jika ada orang lain yang mengalami masalah ini:
Tambahkan slf4j-jdk14-XXXjar ke CLASSPATH Anda (di mana XXX adalah nomor versi - mis. Slf4j-jdk14-1.7.5.jar).
HTH Peter
sumber
Saya menggunakan Jena dan saya menambahkan ketergantungan sesama ke pom.xml
Saya mencoba untuk menambahkan slf4j-sederhana tetapi hanya menghilangkan "SLF4J: Gagal memuat kelas" org.slf4j.impl.StaticLoggerBinder "" kesalahan tetapi logback-klasik menampilkan informasi lebih detail.
The dokumen resmi
sumber
solusinya ditunjukkan di situs web resmi mereka:
solusi: Saya telah menambahkan proyek saya menggunakan riset pakar pada intellij dan saya telah memilih slf4j-jdk14.jar.
sumber
Kemungkinan besar masalah Anda adalah karena
<scope>test</scope>
(dalam beberapa kasus juga<scope>provided</scope>
), seperti yang disebutkan @ thangaraj .Dokumentasi mengatakan:
Jadi, jika Anda tidak memerlukan dependecies untuk tujuan pengujian maka Anda dapat menggunakan sebagai gantinya (apa yang akan Anda lihat di mvnrepository ):
Tanpa cakupan apa pun (secara default akan mengkompilasi lingkup ketika tidak ada cakupan lain yang disediakan):
Ini sama dengan:
sumber
Inilah 5 sen saya ...
Saya memiliki masalah yang sama saat menjalankan tes. Jadi saya sudah memperbaikinya dengan menambahkan implementasi untuk uji runtime saja. Saya menggunakan gradle untuk proyek ini.
sumber
Bagi saya masalahnya adalah: Menggunakan Hibernate, saya melihat bahwa itu sudah menggunakan slf4j, dan sudah ada di classpath saya, jadi saya memutuskan untuk menggunakannya. Langkah selanjutnya - menambahkan imlementor untuk slf4j, jadi saya menambahkan ke maven:
Tetapi gagal dengan kesalahan! SLF4J: Gagal memuat kelas "org.slf4j.impl.StaticLoggerBinder"
Solusinya adalah: Ketergantungan Hibernate untuk slf4j adalah versi 1.7.26 , dan saya menambahkan ketergantungan versi minor 1.7.25 . Jadi ketika saya memperbaikinya - semua menjadi baik-baik saja
sumber
Saya tidak menambahkan dependensi, saya hanya mengubah cara saya mengkonsumsinya.
Kode pratinjau
(Batalkan komentar kode ini jika Anda menggunakan versi pencarian elastis <7.0)
Kode saat ini
Saya menggunakan bulkrequest dan dengan itu saya menghapus kesalahan itu.
sumber