في Java كيفية إنشاء مستوى التسجيل الخاص بك باستخدام Log4j (تكوين Log4j 2)
نشرت: 2017-07-26
إذا كنت بحاجة إلى إضافة مستوى التسجيل الخاص بك في Log4j ، فيمكنك القيام بذلك على النحو التالي. سيتعين عليك إنشاء فصلك الخاص الذي سيمتد من Level
، Custom Log Levels
باستخدام Apache Log4j 2.
Log4j
هو إطار عمل بسيط ومرن logging framework
. يزود التسجيل المطور بسياق تفصيلي لإخفاقات التطبيق. باستخدام log4j ، من الممكن تمكين التسجيل في وقت التشغيل دون تعديل التطبيق الثنائي.
تم تصميم حزمة log4j بحيث يمكن أن تظل هذه البيانات في التعليمات البرمجية المشحونة دون تكبد تكلفة أداء باهظة.

يسمح Log4j لطلبات التسجيل بالطباعة إلى وجهات متعددة. في log4j talk ، تسمى وجهة الإخراج أداة appender
. وهي تختلف من وحدة التحكم والملفات ومكونات واجهة المستخدم الرسومية وخوادم المقابس البعيدة إلى JMS.
ملف جرة تحتاج.
هنا تبعية مافن:
1 2 3 4 5 |
< dependency > < groupId > log4j < / groupId > < artifactId > log4j < / artifactId > < version > 2.16.0 < / version > < / dependency > |
قم بتحديث Log4j إلى أحدث إصدار
CVE-2021-44228: Apache Log4j2 <= 2.14.1 ميزات JNDI المستخدمة في التكوين ورسائل السجل والمعلمات لا تحمي من LDAP الذي يتحكم فيه المهاجم ونقاط نهاية JNDI الأخرى ذات الصلة.
من log4j 2.16.0 ، تم تعطيل هذا السلوك افتراضيًا.
يجب عليك وضع ملف log4j.xml
ضمن مجلد /resources
:

فيما يلي نموذج لـ Java Code لـ:
- Log4j Logging لمستويات السجل المخصصة في Java
- إنشاء مستوى التسجيل الخاص بك في log4j
- مثال مسجل مخصص log4j
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 ) ; } } |
يجب أن يقرأ آخر:

- كيف تبدأ إيقاف خادم Apache Tomcat عبر سطر الأوامر؟ (الإعداد كخدمة Windows)
- قم بإنشاء ونشر خدمة ويب بسيطة وعميل خدمة ويب في Eclipse
هذا هو محتوى ملف log4j.xml
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" ) ; } } |
قم بتشغيل برنامج الاختبار وسترى نوع النتيجة أدناه في Eclipse's Console
.
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 |
قيمة int التي تحددها لمستوى السجل الخاص بك مهمة. لقد حددت هنا أن مستوى سجل " CRUNCHIFY
" يجب أن يكون أعلى من مستوى DEBUG
ولكنه أقل من مستوى TRACE
الذي يوفره log4j.
لذلك كلما قمت بتعيين مستوى أولوية إلى DEBUG في الفئة (في ملف log4j.xml
الخاص بك) ، فإن سجلات مستوى CRUNCHIFY
لن تصل إلى ملف السجل.