Java'da Log4j Kullanarak Kendi Günlük Kayıt Seviyenizi Nasıl Oluşturabilirsiniz (Log4j 2'yi Yapılandırma)
Yayınlanan: 2017-07-26
Log4j'de kendi kayıt seviyenizi eklemeniz gerekiyorsa, bunu aşağıdaki gibi yapabilirsiniz. Apache Log4j 2 ile Level
, Custom Log Levels
arasında uzanan kendi sınıfınızı oluşturmanız gerekecek.
Log4j
basit ve esnek bir logging framework
. Günlüğe kaydetme, geliştiriciyi uygulama hataları için ayrıntılı bağlamla donatır. log4j ile, uygulama ikili dosyasını değiştirmeden çalışma zamanında günlüğe kaydetmeyi etkinleştirmek mümkündür.
log4j paketi, bu ifadelerin ağır bir performans maliyetine maruz kalmadan sevk edilen kodda kalabilmesi için tasarlanmıştır.

Log4j, günlüğe kaydetme isteklerinin birden çok hedefe yazdırılmasına izin verir. log4j konuşmasında, bir çıktı hedefine appender
adı verilir. Konsoldan, dosyalardan, GUI bileşenlerinden, uzak soket sunucularından JMS'ye kadar çeşitlilik gösterirler.
İhtiyacınız olan Jar Dosyası.
İşte bir Maven Bağımlılığı:
1 2 3 4 5 |
< dependency > < groupId > log4j < / groupId > < artifactId > log4j < / artifactId > < version > 2.16.0 < / version > < / dependency > |
Log4j'yi en son sürüme güncelleyin
CVE-2021-44228: Yapılandırmada, günlük mesajlarında ve parametrelerde kullanılan Apache Log4j2 <=2.14.1 JNDI özellikleri, saldırgan kontrollü LDAP ve JNDI ile ilgili diğer uç noktalara karşı koruma sağlamaz.
log4j 2.16.0'dan itibaren bu davranış varsayılan olarak devre dışı bırakılmıştır.
/resources
klasörünün altına log4j.xml
dosyasını koymalısınız:

İşte aşağıdakiler için örnek bir Java Kodu:
- Java'da özel Günlük seviyeleri için Log4j Günlüğü
- log4j'de kendi günlük kaydı seviyenizi oluşturma
- log4j özel günlükçü örneği
CrunchifyLog4jLevel.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
package com . crunchify . tutorials ; import org . apache . log4j . Level ; /** * @author Crunchify.com * */ @SuppressWarnings ( "serial" ) public class CrunchifyLog4jLevel extends Level { /** * Value of CrunchifyLog4jLevel level. This value is lesser than DEBUG_INT and higher * than TRACE_INT} */ public static final int CRUNCHIFY_INT = DEBUG_INT - 10 ; /** * Level representing my log level */ public static final Level CRUNCHIFY = new CrunchifyLog4jLevel ( CRUNCHIFY_INT , "CRUNCHIFY" , 10 ) ; /** * Constructor */ protected CrunchifyLog4jLevel ( int arg0 , String arg1 , int arg2 ) { super ( arg0 , arg1 , arg2 ) ; } /** * Checks whether logArgument is "CRUNCHIFY" level. If yes then returns * CRUNCHIFY}, else calls CrunchifyLog4jLevel#toLevel(String, Level) passing * it Level#DEBUG as the defaultLevel. */ public static Level toLevel ( String logArgument ) { if ( logArgument ! = null && logArgument.toUpperCase().equals("CRUNCHIFY")) { return CRUNCHIFY; } return ( Level ) toLevel ( logArgument , Level . DEBUG ) ; } /** * Checks whether val is CrunchifyLog4jLevel#CRUNCHIFY_INT. If yes then * returns CrunchifyLog4jLevel#CRUNCHIFY, else calls * CrunchifyLog4jLevel#toLevel(int, Level) passing it Level#DEBUG as the * defaultLevel * */ public static Level toLevel ( int val ) { if ( val == CRUNCHIFY_INT ) { return CRUNCHIFY ; } return ( Level ) toLevel ( val , Level . DEBUG ) ; } /** * Checks whether val is CrunchifyLog4jLevel#CRUNCHIFY_INT. If yes * then returns CrunchifyLog4jLevel#CRUNCHIFY, else calls Level#toLevel(int, org.apache.log4j.Level) * */ public static Level toLevel ( int val , Level defaultLevel ) { if ( val == CRUNCHIFY_INT ) { return CRUNCHIFY ; } return Level . toLevel ( val , defaultLevel ) ; } /** * Checks whether logArgument is "CRUNCHIFY" level. If yes then returns * CrunchifyLog4jLevel#CRUNCHIFY, else calls * Level#toLevel(java.lang.String, org.apache.log4j.Level) * */ public static Level toLevel ( String logArgument , Level defaultLevel ) { if ( logArgument ! = null && logArgument.toUpperCase().equals("CRUNCHIFY")) { return CRUNCHIFY; } return Level . toLevel ( logArgument , defaultLevel ) ; } } |
Bir diğeri okumalı:

- Komut Satırı Üzerinden Apache Tomcat Sunucusunu Durdurma Nasıl Başlatılır? (Windows Hizmeti olarak kurulum)
- Eclipse'de basit Web Hizmeti ve Web Hizmeti İstemcisi Oluşturun ve Dağıtın
İşte log4j.xml Dosyasının bir içeriği
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<? xml version = "1.0" encoding = "UTF-8" ?> < ! DOCTYPE log4j : configuration SYSTEM "log4j.dtd" > < log4j : configuration xmlns : log4j = "http://jakarta.apache.org/log4j/" debug = "false" > < ! -- FILE Appender -- > < appender name = "FILE" class = "org.apache.log4j.FileAppender" > < param name = "File" value = "c:/crunchify.log" / > < param name = "Append" value = "false" / > < layout class = "org.apache.log4j.PatternLayout" > < param name = "ConversionPattern" value = "%t %-5p %c - %m%n" / > < / layout > < / appender > < ! -- CONSOLE Appender -- > < appender name = "CONSOLE" class = "org.apache.log4j.ConsoleAppender" > < layout class = "org.apache.log4j.PatternLayout" > < param name = "ConversionPattern" value = "%d{ISO8601} %-5p [%c{1}] %m%n" / > < / layout > < / appender > < ! -- Limit Category and Specify Priority -- > < category name = "com.crunchify" > < priority value = "CRUNCHIFY" class = "com.crunchify.tutorials.CrunchifyLog4jLevel" / > < appender - ref ref = "CONSOLE" / > < / category > < ! -- Setup the Root category -- > < root > < appender - ref ref = "CONSOLE" / > < / root > < / log4j : configuration > |
CrunchifyLog4jLevelTest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package com . crunchify . tutorials ; import org . apache . log4j . Level ; import org . apache . log4j . Logger ; import com . crunchify . tutorials . CrunchifyLog4jLevel ; /** * Tests whether the new log level * com.crunchify.tutorials.CrunchifyLog4jLevel#CRUNCHIFY} is working * * @author Crunchify.com * */ public class CrunchifyLog4jLevelTest { public static void main ( String [ ] args ) { Logger logger = Logger . getLogger ( CrunchifyLog4jLevelTest . class ) ; logger . log ( CrunchifyLog4jLevel . CRUNCHIFY , "I am CrunchifyLog4jLevelTest log" ) ; logger . log ( Level . DEBUG , "I am a DEBUG message" ) ; } } |
Test programını çalıştırın ve Eclipse's Console
aşağıdaki sonuç türünü görmelisiniz.
1 2 |
2013 - 08 - 01 15 : 22 : 36 , 758 CRUNCHIFY [ CrunchifyLog4jLevelTest ] I am CrunchifyLog4jLevelTest log 2013 - 08 - 01 15 : 22 : 36 , 758 DEBUG [ CrunchifyLog4jLevelTest ] I am a DEBUG message |
Log seviyeniz için belirttiğiniz int değeri önemlidir. Burada “ CRUNCHIFY
” log seviyesinin DEBUG
seviyesinden daha yüksek, ancak log4j tarafından sağlanan TRACE
seviyesinden daha düşük olacağını tanımladım.
Bu nedenle, kategoride ( log4j.xml
dosyanızda) DEBUG için bir öncelik düzeyi ayarladığınızda, CRUNCHIFY
düzeyindeki günlükler, günlük dosyasına YAPILMAZ .