Setelah menambahkan log4j ke aplikasi saya, saya mendapatkan output berikut setiap kali saya menjalankan aplikasi saya:
log4j: PERINGATAN Tidak ada appenders yang dapat ditemukan untuk logger (slideselector.facedata.FaceDataParser). log4j: PERINGATAN Silakan inisialisasi sistem log4j dengan benar.
Tampaknya ini berarti file konfigurasi tidak ada. Di mana file konfigurasi ini berada dan apakah konten awal yang baik?
Saya menggunakan java biasa untuk mengembangkan aplikasi desktop. Jadi tidak ada server web dll ...
configuration
log4j
Janusz
sumber
sumber
Jawaban:
Log4j
secara default mencari file yang dipanggillog4j.properties
ataulog4j.xml
di classpath.Anda dapat mengontrol file mana yang digunakan untuk menginisialisasi sendiri dengan mengatur properti sistem seperti yang dijelaskan di sini (Cari bagian "Prosedur Inisialisasi Default").
Sebagai contoh:
Akan menyebabkan
log4j
mencari file bernama customName di classpath.Jika Anda mengalami masalah, saya merasa sangat membantu untuk mengaktifkan log4j.debug:
Ini akan mencetak ke System.out banyak informasi bermanfaat tentang file mana yang digunakan untuk menginisialisasi sendiri, mana penebang / appenders yang dikonfigurasi dan bagaimana dll.
File konfigurasi dapat berupa file properti java atau file xml. Berikut adalah contoh format file properti yang diambil dari halaman dokumentasi intro log4j :
sumber
java -Dlog4j.configuration=customName
? Saya mencoba Pengaturan Proyek / Preferensi / Run / Debug, mengambil beberapa konfigurasi, mengklik Edit, tab Argumen, argumen VM. Apakah customName menyertakan ekstensi .xml?-Dlog4j.debug
dapat membantu men-debug konfigurasi Anda.Ketika mengatur log4j dengan baik sangat bagus untuk proyek "nyata" Anda mungkin menginginkan solusi cepat dan kotor, misalnya jika Anda hanya menguji perpustakaan baru.
Jika demikian panggilan ke metode statis
akan mengatur logging dasar ke konsol, dan pesan kesalahan akan hilang.
sumber
Logger.getRootLogger().setLevel(Level.INFO);
Jika Anda menyingkirkan semuanya (misalnya jika Anda sedang dalam tes)
sumber
Sesuai halaman FAQ Apache Log4j :
Pada dasarnya peringatan Tidak ada appenders dapat ditemukan untuk logger berarti Anda menggunakan
log4j
sistem logging, tetapi Anda belum menambahkan Appenders (seperti FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, dll.) Ke dalam file konfigurasi Anda atau file konfigurasi adalah hilang.Ada tiga cara untuk mengkonfigurasi log4j: dengan file properti (
log4j.properties
), dengan file XML dan melalui kode Java (rootLogger.addAppender(new NullAppender());
).log4j.properties
Jika Anda telah menyajikan file properti (mis. Ketika menginstal Solr), Anda perlu menempatkan file ini dalam direktori classpath Anda .
jalan setapak kelas
Berikut adalah beberapa saran perintah di Linux cara menentukan nilai classpath Anda:
atau dari Jawa:
System.getProperty("java.class.path")
.Log4j XML
Di bawah ini adalah file konfigurasi XML dasar untuk log4j dalam format XML:
Kucing jantan
Jika Anda menggunakan Tomcat, Anda dapat menempatkan
log4j.properties
ke:/usr/share/tomcat?/lib/
atau/var/lib/tomcat?/webapps/*/WEB-INF/lib/
folder.Solr
Untuk referensi,
log4j.properties
file default Solr terlihat seperti:Mengapa log4j tidak dapat menemukan file properti saya di aplikasi J2EE atau WAR?
Lihat juga:
sumber
Anda dapat mengatur lokasi log4j.properties Anda dari dalam aplikasi java Anda dengan menggunakan:
Informasi lebih lanjut tersedia di sini: https://logging.apache.org/log4j/1.2/manual.html
sumber
import
pernyataan selalu membantu sebagai kode selesai tidak semua yang dapat diandalkan.Temukan log4j.properties atau log4j.xml online yang memiliki append root, dan letakkan di classpath Anda.
akan masuk ke konsol. Saya lebih suka masuk ke file sehingga Anda dapat menyelidiki setelahnya.
walaupun untuk aplikasi logging verbose 100KB biasanya perlu ditingkatkan menjadi 1MB atau 10MB, terutama untuk debug.
Secara pribadi saya mengatur beberapa logger, dan mengatur root logger untuk memperingatkan atau tingkat kesalahan daripada men-debug.
sumber
Cara lain untuk melakukannya tanpa meletakkan file properti di classpath, adalah dengan mengatur properti dari kode java secara langsung. Ini kode contohnya.
}
sumber
Anda dapat mengatur level log dengan menggunakan setLevel () .
Tingkat berguna untuk dengan mudah mengatur jenis informasi yang Anda inginkan untuk ditampilkan oleh program.
Sebagai contoh:
Set level yang memungkinkan adalah:
Menurut manual Layanan Logging
sumber
sumber
System.out
. Javadoc untuk metode configure no-args mengatakan:Add a ConsoleAppender that uses PatternLayout using the PatternLayout#TTCC_CONVERSION_PATTERN and prints to System.out to the root category.
Untuk mengaktifkan
-Dlog4j.debug
, saya pergi ke Sistem, Pengaturan sistem lanjutan, variabel Lingkungan dan mengatur variabel sistem_JAVA_OPTIONS
ke-Dlog4j.debug
.sumber
Apa yang sedang Anda kembangkan? Apakah Anda menggunakan Apache Tomcat?
Saya memiliki properti seperti ini di aplikasi Java saya.
sumber
Log4j saya diperbaiki dengan file properti di bawah ini:
sumber
Saya telah membuat file log4j.properties di folder resources di sebelah file hibernate.cfg.xml dan mengisinya dengan teks di bawah ini:
sekarang saya menyingkirkan peringatan dan kesalahan
sumber
Cukup, buat properti log4j.prop di bawah folder src / main / assembly. Bergantung pada apakah Anda ingin pesan log ditampilkan di konsol atau dalam file yang Anda modifikasi file Anda. Berikut ini akan menunjukkan pesan Anda di konsol.
sumber
Seperti yang dijelaskan sebelumnya ada 2 pendekatan
Yang pertama adalah menambahkan baris ini ke metode utama Anda:
Pendekatan kedua adalah menambahkan file log4j.properties standar ini ke classpath Anda:
Saat mengambil pendekatan kedua Anda perlu memastikan Anda menginisialisasi file dengan benar.
Misalnya.
Pastikan Anda membuat folder yang diperlukan untuk menyimpan file log.
sumber
Coba atur atribut debug di log4j: node konfigurasi ke true.
Ini mencetak informasi ketika file konfigurasi dibaca dan digunakan untuk mengkonfigurasi lingkungan log4j. Anda mungkin mendapatkan lebih banyak detail untuk menyelesaikan masalah Anda.
sumber
Logging API - Java Logging API memfasilitasi servis dan pemeliharaan perangkat lunak di lokasi pelanggan dengan membuat laporan log yang sesuai untuk analisis oleh pengguna akhir, administrator sistem, insinyur layanan lapangan, dan tim pengembangan perangkat lunak. Logging API menangkap informasi seperti kegagalan keamanan, kesalahan konfigurasi, hambatan kinerja, dan / atau bug dalam aplikasi atau platform. Paket inti mencakup dukungan untuk mengirimkan catatan log berformat teks atau XML sederhana ke memori, aliran output, konsol, file, dan soket. Selain itu, API pencatatan mampu berinteraksi dengan layanan pencatatan yang sudah ada pada sistem operasi host.
Package java.util.logging «Menyediakan kelas dan antarmuka dari fasilitas logging inti platform Java.
Log4j 1.x «log4j adalah utilitas logging berbasis Java yang populer. Log4j adalah proyek open source berdasarkan karya banyak penulis. Ini memungkinkan pengembang untuk mengontrol pernyataan log mana yang di-output ke berbagai lokasi dengan menggunakan Appenders [konsol, file, DB dan email]. Ini sepenuhnya dapat dikonfigurasi saat runtime menggunakan file konfigurasi eksternal.
File konfigurasi dapat ditulis dalam format XML atau dalam properti Java (key = value).
Struktur Tabel MySQL untuk tabel
logdata
sumber
Perbaikan bagi saya adalah memasukkan "log4j.properties" ke dalam folder "src".
sumber
Jika kita menggunakan apache commons logging wrapper di atas log4j, maka kita perlu memiliki kedua guci yang tersedia di classpath. Juga,
commons-logging.properties
danlog4j.properties/xml
harus tersedia di classpath.Kami juga dapat melewati kelas implementasi dan
log4j.properties
nama sebagaiJAVA_OPTS
menggunakan-Dorg.apache.commons.logging.Log=<logging implementation class name> -Dlog4j.configuration=<file:location of log4j.properties/xml file>
. Hal yang sama dapat dilakukan melalui pengaturanJAVA_OPTS
jika server aplikasi / web.Ini akan membantu mengeksternalisasi properti yang dapat diubah dalam penerapan.
sumber
Ini adalah cara alternatif menggunakan .yaml
Struktur logika:
Sampel:
Ref: LOG4J 2 KONFIGURASI: MENGGUNAKAN YAML
sumber
Untuk pengujian, cara cepat-kotor termasuk pengaturan level log:
sumber
Solusi Maven:
Saya menemukan semua masalah yang sama seperti di atas, dan untuk solusi pakar saya menggunakan 2 dependensi. Konfigurasi ini hanya dimaksudkan untuk pengujian cepat jika Anda ingin proyek sederhana menggunakan logger, dengan konfigurasi standar. Saya bisa membayangkan Anda ingin membuat file konfigurasi nanti jika Anda memerlukan informasi lebih lanjut dan atau menyetel level logging Anda sendiri.
sumber
Saya hanya melakukan ini dan masalah telah diperbaiki.
Ikuti blog di bawah ini
https://intellij-support.jetbrains.com/hc/en-us/community/posts/206875685-How-to-fix-log4j-WARN-console-messages-when-running-an-Application-inside-IntelliJ- Ide
Tapi di sini katanya seperti di bawah ini
Untuk memperbaikinya cukup masukkan file log4j.resources berikut ke folder utama / sumber daya proyek Anda
alih-alih membuat log4j.resources, buat log4j.properties. Klik kanan pada Resource di IntelliJ -> New -> Resource Bundle - Sebut saja sebagai log4j
sumber
Jika Anda mengalami kesalahan ini pada Intellij IDEA bahkan setelah menambahkan
log4j.properties
log4j.xml
file atau pada folder tes sumber daya Anda, mungkin Intellij IDEA belum mengetahui tentang keberadaan file.Jadi, setelah menambahkan file, klik kanan pada file tersebut dan pilih Recompile log4j.xml .
sumber