Masukkan konten berikut dalam file konfigurasi Anda.
Beri nama file konfigurasi log4j2.xml
Letakkan log4j2.xml di folder yang ada di jalur kelas (yaitu folder sumber Anda "src")
Gunakan Logger logger = LogManager.getLogger();untuk menginisialisasi logger Anda
Saya memang mengatur directFlush = "false" karena ini lebih baik untuk masa pakai SSD . Jika Anda membutuhkan log segera di file-log Anda hapus parameter atau setel ke true
Untuk kelengkapan, penggunaan directFlush = "false" sangat disarankan saat menggunakan Async Loggers atau AsyncAppender.
Remko Popma
1
Latar belakang: directFlush = "false" memungkinkan komponen-komponen async Log4J2 untuk menggabungkan beberapa peristiwa log dalam satu disk. Sebagai bonus, acara log terbaru Anda selalu ditulis ke disk dan tidak pernah tertinggal dalam buffer memori. (Sesuatu yang saya
anggap
1
Saya tidak bisa mendapatkan contoh di situs Log4j 2.0 untuk bekerja tetapi yang ini berhasil. Terima kasih.
djangofan
12
Harap tambahkan fakta bahwa pembersihan mungkin diperlukan bagi mereka yang menggunakan gerhana. Demi umat manusia.
Reut Sharabani
1
@ThorstenNiehues Saya tidak bisa mengedit komentar saya sebelumnya, tetapi gerhana menyalin konfigurasi ketika Anda membangun, dan untuk beberapa alasan itu tidak selalu menyalin log4j.xml bahkan jika itu berubah. Setidaknya itulah yang menyelesaikannya untuk saya.
Reut Sharabani
19
Berikut ini adalah daftar sederhana saya log4j2.xmlyang dicetak untuk menghibur dan menulis ke file bergulir harian:
// java
private static final Logger LOGGER = LogManager.getLogger(MyClass.class);
// log4j2.xml
<?xml version="1.0" encoding="UTF-8"?><Configurationstatus="WARN"><Properties><Propertyname="logPath">target/cucumber-logs</Property><Propertyname="rollingFileName">cucumber</Property></Properties><Appenders><Consolename="console"target="SYSTEM_OUT"><PatternLayoutpattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}"/></Console><RollingFilename="rollingFile"fileName="${logPath}/${rollingFileName}.log"filePattern="${logPath}/${rollingFileName}_%d{yyyy-MM-dd}.log"><PatternLayoutpattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}"/><Policies><!-- Causes a rollover if the log file is older than the current JVM's start time --><OnStartupTriggeringPolicy/><!-- Causes a rollover once the date/time pattern no longer applies to the active file --><TimeBasedTriggeringPolicyinterval="1"modulate="true"/></Policies></RollingFile></Appenders><Loggers><Rootlevel="DEBUG"additivity="false"><AppenderRefref="console"/><AppenderRefref="rollingFile"/></Root></Loggers></Configuration>
TimeBasedTriggeringPolicy
interval (integer) - Seberapa sering rollover terjadi berdasarkan unit waktu paling spesifik dalam pola tanggal. Misalnya, dengan pola tanggal dengan jam sebagai item yang paling spesifik dan dan kenaikan 4 rollover akan terjadi setiap 4 jam. Nilai standarnya adalah 1.
modate (boolean) - Menunjukkan apakah interval harus disesuaikan untuk menyebabkan rollover berikutnya terjadi pada batas interval. Misalnya, jika itemnya adalah jam, jam saat ini adalah jam 3 pagi dan intervalnya adalah 4 maka rollover pertama akan terjadi pada jam 4 pagi dan kemudian jam berikutnya akan terjadi pada jam 8 pagi, siang, jam 4 sore, dll.
Secara pribadi, saya baru saja mulai menggunakan log4j2, tapi saya cenderung ke arah konfigurasi "XML ketat" (yaitu, menggunakan atribut alih-alih nama elemen), yang dapat divalidasi skema.
Berikut ini adalah contoh sederhana saya menggunakan konfigurasi otomatis dan mode ketat, menggunakan "Properti" untuk mengatur nama file:
<?xml version="1.0" encoding="UTF-8"?><Configurationmonitorinterval="30"status="info"strict="true"><Properties><Propertyname="filename">log/CelsiusConverter.log</Property></Properties><Appenders><Appendertype="Console"name="Console"><Layouttype="PatternLayout"pattern="%d %p [%t] %m%n"/></Appender><Appendertype="Console"name="FLOW"><Layouttype="PatternLayout"pattern="%C{1}.%M %m %ex%n"/></Appender><Appendertype="File"name="File"fileName="${filename}"><Layouttype="PatternLayout"pattern="%d %p %C{1.} [%t] %m%n"/></Appender></Appenders><Loggers><Rootlevel="debug"><AppenderRefref="File"/><AppenderRefref="Console"/><!-- Use FLOW to trace down exact method sending the msg --><!-- <AppenderRef ref="FLOW" /> --></Root></Loggers></Configuration>
Konfigurasi fleksibel berguna ketika Anda mencoba memisahkan konfigurasi dari build dan meletakkan konfigurasi ke dalam repositori di tempat lain. Sayangnya, kerumitannya membuatnya sedikit mengganggu, tetapi saya pikir saya akan membuang manfaat untuk opsi fleksibel untuk konfigurasi.
adprocas
Apa Filekebijakannya di sini? Berapa ukuran file maks? Dan bagaimana cara menulis ke file? (apakah file selalu berisi 10mb log terakhir?)
Jawaban:
Catatan:
Logger logger = LogManager.getLogger();
untuk menginisialisasi logger Andasumber
Berikut ini adalah daftar sederhana saya
log4j2.xml
yang dicetak untuk menghibur dan menulis ke file bergulir harian:Keluaran:
File log baru akan dibuat setiap hari dengan hari sebelumnya secara otomatis diganti namanya menjadi:
cucumber_yyyy-MM-dd.log
Dalam proyek Maven, Anda akan menempatkan
log4j2.xml
disrc/main/resources
atausrc/test/resources
.sumber
log4j2 memiliki sistem konfigurasi yang sangat fleksibel (yang IMHO lebih merupakan gangguan daripada bantuan), Anda bahkan dapat menggunakan JSON. Lihat https://logging.apache.org/log4j/2.x/manual/configuration.html untuk referensi.
Secara pribadi, saya baru saja mulai menggunakan log4j2, tapi saya cenderung ke arah konfigurasi "XML ketat" (yaitu, menggunakan atribut alih-alih nama elemen), yang dapat divalidasi skema.
Berikut ini adalah contoh sederhana saya menggunakan konfigurasi otomatis dan mode ketat, menggunakan "Properti" untuk mengatur nama file:
sumber
File
kebijakannya di sini? Berapa ukuran file maks? Dan bagaimana cara menulis ke file? (apakah file selalu berisi 10mb log terakhir?)