1 تعليمات التكوين Log4j
1.1 ملف التكوين
يمكن تعيين Log4j ديناميكيًا من خلال برنامج Java. العيب الواضح لهذه الطريقة هو أنه إذا كنت بحاجة إلى تعديل مستوى إخراج السجل والمعلومات الأخرى، فيجب عليك تعديل ملف Java ثم إعادة الترجمة، وهو أمر مزعج للغاية؛
يمكن أيضًا تعيين Log4j من خلال ملفات التكوين، وهو يدعم حاليًا تنسيقين لملفات التكوين:
• ملف إكس إم إل
• ملف الخصائص (مستحسن)
فيما يلي المحتوى الكامل لملف التكوين log4j:
انسخ رمز الكود كما يلي:
log4j.rootCategory=INFO, stdout
log4j.rootLogger=info, stdout
### ستدوت ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p - %m%n
### مجموعة الحزمة ###
log4j.logger.org.springframework=info
log4j.logger.org.apache.catalina=info
log4j.logger.org.apache.commons.digester.Digester=info
log4j.logger.org.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=debug
1.2 تكوين مسجل الجذر
يحدد مسجل الجذر بشكل أساسي مستوى السجل ووجهة الإخراج التي يدعمها log4j.
log4j.rootLogger = [المستوى]، اسم الملحق، اسم الملحق، ...
من بينها، المستوى هو أولوية التسجيل، والذي ينقسم إلى مستويات OFF أو FATAL أو ERROR أو WARN أو INFO أو DEBUG أو ALL أو مستويات مخصصة.
يوصى باستخدام أربعة مستويات فقط، والأولويات من الأعلى إلى الأدنى هي الخطأ والتحذير والمعلومات والتصحيح.
يحدد appenderName مكان إخراج معلومات السجل، ويمكن تحديد وجهات إخراج متعددة في نفس الوقت.
1.3 تكوين مُلحق وجهة الإخراج
يحدد المُلحق بشكل أساسي مكان إخراج معلومات السجل، وبناء الجملة الرئيسي هو:
انسخ رمز الكود كما يلي:
log4j.appender.appenderName = classInfo
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.optionN = valueN
تتضمن المُلحقات المقدمة بواسطة Log4j ما يلي:
•org.apache.log4j.ConsoleAppender(وحدة التحكم)،
•org.apache.log4j.FileAppender(ملف)،
•org.apache.log4j.DailyRollingFileAppender (ينشئ ملف سجل كل يوم)،
•org.apache.log4j.RollingFileAppender (يُنشئ ملفًا جديدًا عندما يصل حجم الملف إلى الحجم المحدد)
•org.apache.log4j.WriterAppender (إرسال معلومات السجل بتنسيق الدفق إلى أي مكان محدد)
خذ ConsoleAppender كمثال، مثل:
انسخ رمز الكود كما يلي:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
1.4 تكوين تخطيط تنسيق معلومات السجل
يعد التخطيط مسؤولاً عن تنسيق مخرجات المُلحق، ويكون تركيبه كما يلي:
انسخ رمز الكود كما يلي:
log4j.appender.appenderName.layout = classInfo
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.optionN = valueN
من بينها، تتضمن التخطيطات التي يوفرها Log4j ما يلي:
•org.apache.log4j.HTMLLayout (التخطيط بتنسيق جدول HTML)،
•org.apache.log4j.PatternLayout (يمكن تحديد أنماط التخطيط بمرونة)،
•org.apache.log4j.SimpleLayout (يحتوي على سلسلة المستوى والمعلومات الخاصة بمعلومات السجل)
•org.apache.log4j.TTCCLayout (يحتوي على معلومات حول وقت إنشاء السجل والخيط والفئة وما إلى ذلك)
1.5 ضبط مستوى إخراج الحزمة
يمكنك ضبط مستوى إخراج السجل لحزم مختلفة. بناء الجملة هو:
log4j.logger.packageName=level
من بينها، packageName هو اسم الحزمة الفعلي، والمستوى هو مستوى السجل، على سبيل المثال:
انسخ رمز الكود كما يلي:
log4j.logger.org.springframework=info
log4j.logger.org.apache.catalina=info
log4j.logger.org.apache.commons.digester.Digester=info
log4j.logger.org.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=debug
2 Log4j مدمج مع J2ee
2.1 استخدام العمارة الربيعية
لقد قدم لنا الربيع الكثير من الأشياء. إذا كان النظام يستخدم إطار عمل الربيع، فمن السهل جدًا دمج log4j، وهو مقسم بشكل أساسي إلى ثلاث خطوات، على النحو التالي:
2.1.1 تعريف ملف التكوين log4j
انسخ رمز الكود كما يلي:
log4j.rootCategory=INFO, stdout
log4j.rootLogger=info, stdout
### ستدوت ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p - %m%n
### سجل للملف ###
log4j.logger.org.springframework=info
log4j.logger.org.apache.catalina=info
log4j.logger.org.apache.commons.digester.Digester=info
log4j.logger.org.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=debug
2.1.2 تعريف المستمعين
يجب تعريف المستمع في web.xml، والذي يتضمن بشكل أساسي: تحديد دليل ملف التكوين log4j ومنصت log4j، كما يلي:
انسخ رمز الكود كما يلي:
<?xml version="1.0" encoding="UTF-8"?>
<إصدار تطبيق الويب = "2.4"
xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!--موقع ملف التكوين Log4j الذي تم تحميله بواسطة Spring-->
<سياق المعلمة>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<سياق المعلمة>
<param-name>contextConfigLocation</param-name>
<قيمة المعلمة>
/WEB-INF/classes/applicationContext*.xml
</param-value>
</context-param>
<!--مُحمل تكوين Spring log4j-->
<المستمع>
<فئة المستمع>
org.springframework.web.util.Log4jConfigListener
</ فئة المستمع >
</المستمع>
<المستمع>
<فئة المستمع>
org.springframework.web.context.ContextLoaderListener
</ فئة المستمع >
</المستمع>
<سيرفيليت>
<servlet-name>InitiaServlet</servlet-name>
<servlet-class>chb.test.web.InitiaServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</سيرفلت>
<قائمة ملفات الترحيب>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2.1.3 فئة الاختبار
انسخ رمز الكود كما يلي:
الحزمة com.dheaven.mip.web؛
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.Logger;
الطبقة العامة InitiaServlet تمتد HttpServlet {
سجل المسجل المحمي = Logger.getLogger(InitiaServlet.class);
serialVersionUID النهائي الطويل الخاص = 8550329576989690578L؛
/**
* منشئ الكائن.
*/
عامة InitiaServlet () {
ممتاز()؛
}
/**
* تدمير servlet
*/
تدمير الفراغ العام () {
super.destroy();
}
/**
* تهيئة السيرفلت
*
* @throws ServletException في حالة حدوث خطأ
*/
init الفراغ العام () يلقي ServletException {
log.debug("بدأ الخادم وبدأ تشغيل log4j");
}
}
2.2 عدم استخدام العمارة الربيعية
إذا كان النظام لا يستخدم الربيع، فلنأخذ servlet كمثال، فهو بسيط جدًا، يمكنك فقط اتباع الخطوات ولصق الكود فقط، بدون أي هراء.
2.2.1 تعريف ملف التكوين log4j
ضعه في دليل WEB-INF الخاص بمشروع الويب، بالمحتوى التالي:
انسخ رمز الكود كما يلي:
log4j.rootCategory=INFO, stdout
log4j.rootLogger=info, stdout
### ستدوت ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p - %m%n
### مجموعة الحزمة ###
log4j.logger.org.apache.catalina=info
log4j.logger.org.apache.commons.digester.Digester=info
log4j.logger.org.apache.catalina.startup.TldConfig=info
log4j.logger.com.dheaven=debug
2.2.2 إنشاء فئة التهيئة log4j
انسخ رمز الكود كما يلي:
الحزمة com.dheaven.mip.web؛
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.PropertyConfigurator;
الطبقة العامة InitLog4j تمتد HttpServlet {
serialVersionUID النهائي الطويل الخاص الثابت = 1L؛
init الفراغ العام () يلقي ServletException {
String prefix = getServletContext().getRealPath("/");
prefix = prefix.replace("//"، "/")؛
ملف السلسلة = getInitParameter("log4j-init-file");
// إذا لم يتم تعيين ملف log4j-init، فلا فائدة من المحاولة
إذا (ملف! = فارغ) {
PropertyConfigurator.configure(prefix + file);
}
}
}
2.2.3 تعريف فئة التهيئة في Web.xml
انسخ رمز الكود كما يلي:
<سيرفيليت>
<servlet-name>log4j-init</servlet-name>
<servlet-class>chb.test.web.InitLog4j</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</سيرفلت>
2.2.4 فئة الاختبار
انسخ رمز الكود كما يلي:
الحزمة chb.test.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.Logger;
الطبقة العامة InitiaServlet تمتد HttpServlet {
سجل المسجل المحمي = Logger.getLogger(InitiaServlet.class);
serialVersionUID النهائي الطويل الخاص = 8550329576989690578L؛
/**
* منشئ الكائن.
*/
عامة InitiaServlet () {
ممتاز()؛
}
/**
* تدمير servlet
*/
تدمير الفراغ العام () {
super.destroy();
}
/**
* تهيئة السيرفلت
*
* @throws ServletException في حالة حدوث خطأ
*/
init الفراغ العام () يلقي ServletException {
log.debug("بدأ الخادم وبدأ تشغيل log4j");
}
}