تكوين مكون Log4j
يتكون Log4j من ثلاثة مكونات مهمة:
1. أولوية معلومات السجل (المسجل)
2. وجهة إخراج معلومات السجل (المُلحق)
3. تنسيق الإخراج (التخطيط) لمعلومات السجل.
ملخص:
تتضمن أولويات معلومات السجل من الأعلى إلى الأدنى ERROR، وWARN، وINFO، وDEBUG، والتي تُستخدم لتحديد أهمية معلومات السجل هذه على التوالي؛
تحدد وجهة الإخراج لمعلومات السجل ما إذا كان سيتم طباعة السجل على وحدة التحكم أو ملف؛
يتحكم تنسيق الإخراج في محتوى عرض معلومات السجل.
مقدمة Log4j
Log4j هو مشروع مفتوح المصدر لـ Apache. باستخدام Log4j، يمكننا التحكم في وجهة نقل معلومات السجل إلى وحدات التحكم، والملفات، ومكونات واجهة المستخدم الرسومية، وحتى خوادم المقبس، ومسجلات أحداث NT، وشياطين UNIX Syslog، وما إلى ذلك؛ تنسيق الإخراج لكل سجل من خلال تحديد مستوى كل معلومات السجل، يمكننا التحكم في عملية إنشاء السجل بمزيد من التفاصيل. log4j-- سجل جافا (سجل جافا).
عنوان تنزيل Log4j: http://logging.apache.org/log4j/2.x/download.html
تنسيق ملف التكوين Log4j
يدعم Log4j تنسيقين لملفات التكوين:
1. ملفات بتنسيق XML
2. الملفات بتنسيق الخصائص
لا يمكنك أيضًا استخدام ملف التكوين على الإطلاق، ولكن يمكنك تكوين بيئة Log4j في التعليمات البرمجية. ومع ذلك، فإن استخدام ملفات التكوين سيجعل تطبيقك أكثر مرونة.
ملف تكوين تعريف Log4j
1. قم بتكوين مسجل الجذر
بناء الجملة الخاص به هو:
وصف المعلمة:
المستوى هو أولوية التسجيل، والذي ينقسم إلى OFF، أو FATAL، أو ERROR، أو WARN، أو INFO، أو DEBUG، أو ALL أو المستوى الذي تحدده.
إيقاف: أعلى مستوى، يستخدم لإيقاف كافة عمليات التسجيل
فادح: يشير إلى أن كل حدث خطأ فادح سيؤدي إلى خروج التطبيق.
خطأ: يشير إلى أنه على الرغم من حدوث خطأ ما، إلا أنه لا يؤثر على استمرار تشغيل النظام.
تحذير: يشير إلى حدوث حالة خطأ محتملة
المعلومات: تستخدم بشكل عام على المستوى الخشن، مع التركيز على عملية تشغيل التطبيق بالكامل
تصحيح الأخطاء: بشكل عام وعلى مستوى تفصيلي، يتم التركيز على عملية تشغيل التطبيق بالكامل.
الكل: المستوى الأدنى، يستخدم لتشغيل كافة عمليات التسجيل.
يوصي Log4j باستخدام أربعة مستويات فقط، والأولويات من الأعلى إلى الأدنى هي الخطأ والتحذير والمعلومات والتصحيح. من خلال المستويات المحددة هنا، يمكنك التحكم في تشغيل وإيقاف المستوى المقابل لمعلومات السجل في التطبيق.
يشير appenderName إلى مكان إخراج معلومات السجل، ويمكن تحديد وجهات إخراج متعددة في نفس الوقت.
2. قم بتكوين مُلحق وجهة إخراج معلومات السجل
بناء الجملة الخاص به هو:
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN
org.apache.log4j.ConsoleAppender(وحدة التحكم)
org.apache.log4j.FileAppender(ملف)
org.apache.log4j.DailyRollingFileAppender (ينشئ ملف سجل كل يوم)
org.apache.log4j.RollingFileAppender (ينشئ ملفًا جديدًا عندما يصل حجم الملف إلى الحجم المحدد)
org.apache.log4j.WriterAppender (يرسل معلومات السجل بتنسيق الدفق إلى أي مكان محدد)
3. قم بتكوين تنسيق معلومات السجل
بناء الجملة هو:
log4j.appender.appenderName.layout.option1 = القيمة1 …
log4j.appender.appenderName.layout.option = valueN
org.apache.log4j.HTMLLayout (التخطيط بتنسيق جدول HTML)،
org.apache.log4j.PatternLayout (يمكن تحديد أنماط التخطيط بمرونة)،
org.apache.log4j.SimpleLayout (يحتوي على سلسلة المستوى والمعلومات الخاصة بمعلومات السجل)،
org.apache.log4j.TTCCLayout (يحتوي على معلومات حول وقت إنشاء السجل والخيط والفئة وما إلى ذلك)
يستخدم Log4J تنسيق طباعة مشابهًا لوظيفة printf في لغة C لتنسيق معلومات السجل، وتكون معلمات الطباعة كما يلي:
%mأخرج الرسالة المحددة في الكود
%p أولوية الإخراج، وهي DEBUG، INFO، WARN، ERROR، FATAL
يقوم %r بإخراج عدد المللي ثانية المستغرقة من بداية التطبيق إلى إخراج معلومات السجل.
يقوم %c بإخراج الفئة التي ينتمي إليها، وعادةً ما يكون الاسم الكامل للفئة.
%tأخرج اسم مؤشر الترابط الذي أنشأ حدث السجل
يقوم %n بإخراج حرف إرجاع وتغذية السطر، وهو "rn" على النظام الأساسي لـ Windows و"n" على النظام الأساسي Unix.
يقوم %d بإخراج تاريخ أو وقت النقطة الزمنية للسجل. التنسيق الافتراضي هو ISO8601. ويمكنك أيضًا تحديد التنسيق بعد ذلك، مثل: %d{yyyMMMddHH:mm:ss,SSS}. 2002 22:10 :28,921
%l يقوم بإخراج الموقع الذي حدث فيه حدث السجل، بما في ذلك اسم الفئة ومؤشر الترابط الذي حدث فيه ورقم السطر في التعليمات البرمجية. مثال: Testlog4.main(TestLog4.java:10)
%x: إخراج NDC (بيئة التشخيص المتداخلة) المرتبطة بمؤشر الترابط الحالي، ويستخدم بشكل خاص في التطبيقات متعددة العملاء ومتعددة الخيوط مثل javaservlets.
%%: إخراج حرف "%" %F: إخراج اسم الملف حيث يتم إنشاء رسالة السجل
%L: رقم السطر في كود الإخراج
%m: إخراج الرسالة المحددة في الكود وإنشاء معلومات السجل المحددة
%n: يُخرج حرف إرجاع وتغذية السطر، وهو "/r/n" على نظام التشغيل Windows و"/n" على نظام التشغيل Unix. عند إخراج معلومات السجل، يمكنك إضافة معدلات بين % وحرف الوضع إلى التحكم في الحد الأدنى للعرض والحد الأقصى للعرض، ومحاذاة النص.
يحب:
1)%20c: حدد اسم فئة الإخراج، الحد الأدنى للعرض هو 20. إذا كان اسم الفئة أقل من 20، فسيتم محاذاته إلى اليمين بشكل افتراضي.
2)%-20c: حدد اسم فئة الإخراج، والحد الأدنى للعرض هو 20. إذا كان اسم الفئة أقل من 20، فإن علامة "-" تحدد المحاذاة اليسرى.
3)%.30c: حدد اسم فئة الإخراج الحد الأقصى للعرض هو 30. إذا كان اسم الفئة أكبر من 30، فسيتم قطع الأحرف الإضافية على اليسار، ولكن إذا كان أقل من 30، فسيتم قطعها. لا تكون هناك مسافات.
4)%20.30c: إذا كان اسم الفئة أقل من 20 حرفًا، فاملأ المسافات وقم بضبطه لليمين. إذا كان الاسم أطول من 30 حرفًا، فاقطع الأحرف من الجانب الأيسر.
طريقة تكوين log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:نظام التكوين "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
< اسم الملحق = "appender1"
>
<param name="File" value="logfile08.html" />
<param name="MaxFileSize" value="1MB" />
<param name="MaxBackupIndex" value="5" />
<التخطيط>
</تخطيط>
</appender>
<الجذر>
<قيمة المستوى = "تصحيح" />
<appender-ref ref="appender1" />
</الجذر>
</log4j:التكوين>
قبل استخدام Log4j في البرنامج، قم أولاً باستيراد commons-logging.jar وlogging-log4j-1.2.9.jar في مسار الفصل، ووضع log4j.properties في الدليل الجذر src. لاستخدام log4j في الفصل الدراسي، قم أولاً بتعريف متغير ثابت Loggerlogger=Logger.getLog("classname").
الاستخدام كالتالي: logger.debug("debugmessage") أو logger.info("infomessage").
1. احصل على المسجل
باستخدام Log4j، الخطوة الأولى هي الحصول على مسجل، والذي سيكون مسؤولاً عن التحكم في معلومات السجل.
بناء الجملة الخاص به هو:
publicstaticLoggergetLogger(Stringname)
يحصل على المسجل بالاسم المحدد، وإذا لزم الأمر، يقوم بإنشاء مسجل جديد لهذا الاسم. يأخذ الاسم عمومًا اسم هذه الفئة، مثل:
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())
2. اقرأ ملف التكوين
بعد الحصول على المسجل، الخطوة الثانية هي تكوين بيئة Log4j.
BasicConfigurator.configure(): يستخدم بيئة Log4j الافتراضية تلقائيًا وبسرعة.
PropertyConfigurator.configure(StringconfigFilename): اقرأ ملف التكوين المكتوب باستخدام ملف خاصية Java.
DOMConfigurator.configure(Stringfilename): اقرأ ملف التكوين في نموذج XML.
3. أدخل معلومات السجل (معلومات السجل المنسقة)
عند اكتمال الخطوتين الضروريتين المذكورتين أعلاه، يمكنك بسهولة استخدام عبارات التسجيل ذات الأولويات المختلفة لإدراجها في أي مكان تريد تسجيله. ويكون بناء الجملة كما يلي:
Logger.debug(Objectmessage);
Logger.info(Objectmessage);
Logger.warn(Objectmessage);
Logger.error(Objectmessage);
مظاهرة البرنامج
1. استخدم برنامجًا لإخراج معلومات السجل
import java.io.IOException;
import org.apache.commons.logging.impl.Log4JLogger;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
/**
*
* @الإصدار: 1.1
*
*@author: Su Ruonian<a href="mailto:[email protected]">أرسل بريدًا إلكترونيًا</a>
*
*@منذ: 1.0 وقت الإنشاء: 1-2013 03:19:42 مساءً
*
* @function: إخراج السجل من خلال الكود
*
*/
فئة عامة Log4jPrintByCode {
مسجل ثابت خاص = Logger.getLogger(Log4jPrintByCode.class);
تخطيط تخطيط خاص = SimpleLayout () جديد ؛
FileAppender الخاص fileAppender؛
// استخدم تبعيات البناء وقم بالتهيئة عند إنشاء الكائنات
public Log4jPrintByCode(تخطيط التخطيط، مستوى المستوى،سلسلة distDir){
BasicConfigurator.configure(); // استخدم معلومات التكوين الافتراضية، لا حاجة لكتابة log4j.properties
يحاول {
init(layout,level, distDir);
} قبض (الاستثناء ه) {
printStackTrace();
}
}
الحرف الأول الفراغي العام (تخطيط التخطيط، مستوى المستوى، سلسلة distDir) يطرح استثناء {
logger.setLevel(level); // تعيين مستوى إخراج السجل
fileAppender = new FileAppender(layout,distDir,false);
logger.addAppender(fileAppender); // إضافة محطة الإخراج
}
public static void main(String[] args) {
تخطيط SimpleLayout = جديد SimpleLayout();
String logDir = "log4jcode.Log";
Log4jPrintByCode log4jCode = new Log4jPrintByCode(layout,Level.INFO,logDir);
// سيتم إخراج المعلومات التالية
log4jCode.logger.info("طباعة معلومات السجل بواسطة log4j");
log4jCode.logger.warn("سجل تحذير الطباعة بواسطة log4j");
log4jCode.logger.error("خطأ في السجل أثناء الطباعة بواسطة log4j");
}
التخطيط العام getLayout() {
تخطيط العودة
}
مجموعة الفراغ العام (تخطيط التخطيط) {
this.layout =layout;
}
public FileAppender getFileAppender() {
إرجاع fileAppender;
}
public void setFileAppender(FileAppender fileAppender) {
this.fileAppender = fileAppender;
}
}
// سجل معلومات مستوى المعلومات
إذا (logger.isInfoEnabled()) {
logger.info("هذه رسالة معلومات من Dao.");
}
2. يقوم Log4J بإخراج نفس معلومات السجل إلى وجهات متعددة
/* تبديل قاعدة البيانات */
استخدم db_log4j؛
/* جدول معلومات السجل */
إنشاء جدول tb_log(
logId int ليس فارغًا تعليق auto_increment "الرقم التسلسلي"،
createDate varchar(45) تعليق فارغ افتراضي "وقت إنشاء السجل"،
مؤشر الترابط varchar(45) التعليق الفارغ الافتراضي "الموضوع الحالي"،
المستوى varchar(45) التعليق الفارغ الافتراضي "مستوى السجل الحالي"،
فئة varchar(45) تعليق فارغ افتراضي "إنشاء فئة سجل"،
الرسالة varchar(245) التعليق الفارغ الافتراضي "سجل المعلومات المحددة"،
المفتاح الأساسي (معرف السجل)
);
يقوم مثيل التطبيق بإخراج معلومات السجل إلى وحدة التحكم والملف وقاعدة البيانات في نفس الوقت.
إنشاء قاعدة البيانات والجداول
/* تبديل قاعدة البيانات */
استخدم db_log4j؛
/* جدول معلومات السجل */
إنشاء جدول tb_log(
logId int ليس فارغًا تعليق auto_increment "الرقم التسلسلي"،
createDate varchar(45) تعليق فارغ افتراضي "وقت إنشاء السجل"،
مؤشر الترابط varchar(45) التعليق الفارغ الافتراضي "الموضوع الحالي"،
المستوى varchar(45) التعليق الفارغ الافتراضي "مستوى السجل الحالي"،
فئة varchar(45) تعليق فارغ افتراضي "إنشاء فئة سجل"،
الرسالة varchar(245) التعليق الفارغ الافتراضي "سجل المعلومات المحددة"،
المفتاح الأساسي (معرف السجل)
);
#Define إخراج A1 إلى وحدة التحكم
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#Define وضع تخطيط A1 كـ PaternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# تحديد تنسيق الإخراج لـ A1
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n
#Define إخراج A2 إلى الملف
log4j.appender.A2=org.apache.log4j.RollingFileAppender
#Define الملف A2 الذي سيتم إخراجه إليه
log4j.appender.A2.File=./log/sysLog.log
#Define الحد الأقصى لطول ملف الإخراج A2
log4j.appender.A2.MaxFileSize = 1 كيلو بايت
# تحديد عدد ملفات النسخ الاحتياطي لـ A2
log4j.appender.A2.MaxBackupIndex = 3
#Define وضع تخطيط A2 كـ PatternLayout
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
# تحديد وضع الإخراج لـ A2
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n
#Define إخراج A3 إلى قاعدة البيانات
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/db_log4j
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=root
log4j.appender.A3.password=root
#Define تخطيط A3 وعبارات SQL المنفذة
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=INSERT INTO tb_log(createDate,thread,level,class,message) value('%d','%t','%-5p','%c','%m ')
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
/**
*
* @الإصدار: 1.1
*
*@author: Su Ruonian<a href="mailto:[email protected]">أرسل بريدًا إلكترونيًا</a>
*
*@منذ: 1.0 وقت الإنشاء: 1-1-2013 04:13:59 مساءً
*
* @function: التحكم في إخراج معلومات السجل إلى وجهات متعددة من خلال ملفات التكوين
*
*/
الفئة العامة Log4jPrintByConfigure {
مسجل ثابت خاص = Logger.getLogger(Log4jPrintByConfigure.class);
public static void main(String[] args) يطرح الاستثناء {
// قم بتحميل ملف تكوين السجل log4j.properties
PropertyConfigurator.configure("configure/log4j.properties");// يتم تخزين الملف في مجلد التكوين في نفس الدليل مثل src
// إذا تم وضعها ضمن src، فيجب أن تكون المعلمات "bin/log4j.properties" أو "src/log4j.properties". يوصى باستخدام bin كمعيار.
// ستتم طباعة المعلومات التالية
logger.debug("مسجل طباعة DEBUGmessgae");
logger.info("رسالة معلومات طباعة المسجل");
logger.warn("رسالة تحذير طباعة المسجل");
logger.error("رسالة خطأ في طباعة المسجل");
logger.fatal("هذه رسالة فادحة");
}
}