1 คำแนะนำในการกำหนดค่า Log4j
1.1 ไฟล์การกำหนดค่า
Log4j สามารถตั้งค่าแบบไดนามิกผ่านโปรแกรม Java ข้อเสียที่ชัดเจนของวิธีนี้ก็คือ หากคุณต้องการแก้ไขระดับเอาต์พุตของบันทึกและข้อมูลอื่นๆ คุณต้องแก้ไขไฟล์ Java แล้วคอมไพล์ใหม่ ซึ่งยุ่งยากมาก
Log4j สามารถตั้งค่าผ่านไฟล์กำหนดค่าได้ ปัจจุบันรองรับไฟล์การกำหนดค่าสองรูปแบบ:
•ไฟล์ xml
•ไฟล์คุณสมบัติ (แนะนำ)
ต่อไปนี้เป็นเนื้อหาทั้งหมดของไฟล์การกำหนดค่า log4j:
คัดลอกรหัสรหัส ดังต่อไปนี้:
log4j.rootCategory=ข้อมูล, stdout
log4j.rootLogger=ข้อมูล, 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{สัมบูรณ์} %5p - %m%n
### ชุดเซ็ต ###
log4j.logger.org.springframework=ข้อมูล
log4j.logger.org.apache.catalina=ข้อมูล
log4j.logger.org.apache.commons.digester.Digester=ข้อมูล
log4j.logger.org.apache.catalina.startup.TldConfig=ข้อมูล
log4j.logger.chb.test=debug
1.2 กำหนดค่า root Logger
ตัวบันทึกรูทจะกำหนดระดับการบันทึกและปลายทางเอาต์พุตที่ log4j รองรับเป็นหลัก
log4j.rootLogger = [ ระดับ ] , appenderName, appenderName, …
ในหมู่พวกเขา ระดับคือลำดับความสำคัญของการบันทึก ซึ่งแบ่งออกเป็นระดับปิด ร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ไข ทั้งหมด หรือระดับที่ปรับแต่งเอง
ขอแนะนำให้ใช้เพียงสี่ระดับเท่านั้น ลำดับความสำคัญจากมากไปน้อยคือ ERROR, WARN, INFO และ DEBUG
appenderName ระบุตำแหน่งที่เอาต์พุตข้อมูลบันทึก และสามารถระบุปลายทางเอาต์พุตหลายรายการพร้อมกันได้
1.3 กำหนดค่าภาคผนวกปลายทางเอาต์พุต
ภาคผนวกส่วนใหญ่จะกำหนดว่าข้อมูลบันทึกจะถูกส่งออกไปที่ใด ไวยากรณ์หลักคือ:
คัดลอกรหัสรหัส ดังต่อไปนี้:
log4j.appender.appenderName = classInfo
log4j.appender.appenderName.option1 = ค่า 1
-
log4j.appender.appenderName.optionN = ค่า N
ภาคผนวกที่จัดทำโดย 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 กำหนดค่าเค้าโครงรูปแบบของข้อมูลบันทึก
เค้าโครงมีหน้าที่ในการจัดรูปแบบผลลัพธ์ของ Appender ไวยากรณ์ของมันคือ:
คัดลอกรหัสรหัส ดังต่อไปนี้:
log4j.appender.appenderName.layout = classInfo
log4j.appender.appenderName.layout.option1 = ค่า 1
-
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=ระดับ
ในจำนวนนั้น packageName คือชื่อแพ็กเกจจริง และระดับคือระดับบันทึก ตัวอย่างเช่น:
คัดลอกรหัสรหัส ดังต่อไปนี้:
log4j.logger.org.springframework=ข้อมูล
log4j.logger.org.apache.catalina=ข้อมูล
log4j.logger.org.apache.commons.digester.Digester=ข้อมูล
log4j.logger.org.apache.catalina.startup.TldConfig=ข้อมูล
log4j.logger.chb.test=debug
2 Log4j รวมกับ J2ee
2.1 การใช้สถาปัตยกรรมสปริง
Spring นั้นดีจริงๆ มันได้ทำหลายอย่างให้เราแล้ว
2.1.1 กำหนดไฟล์การกำหนดค่า log4j
คัดลอกรหัสรหัส ดังต่อไปนี้:
log4j.rootCategory=ข้อมูล, stdout
log4j.rootLogger=ข้อมูล, 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{สัมบูรณ์} %5p - %m%n
### เข้าสู่ระบบไฟล์ ###
log4j.logger.org.springframework=ข้อมูล
log4j.logger.org.apache.catalina=ข้อมูล
log4j.logger.org.apache.commons.digester.Digester=ข้อมูล
log4j.logger.org.apache.catalina.startup.TldConfig=ข้อมูล
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>
</บริบท-พารามิเตอร์>
<บริบท-พารามิเตอร์>
<param-name>contextConfigLocation</param-name>
<ค่าพารามิเตอร์>
/WEB-INF/คลาส/applicationContext*.xml
</ค่าพารามิเตอร์>
</บริบท-พารามิเตอร์>
<!--ตัวโหลดการกำหนดค่า 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>
<โหลดเมื่อเริ่มต้น>1</โหลดเมื่อเริ่มต้น>
</เซิร์ฟเล็ต>
<ยินดีต้อนรับรายการไฟล์>
<ยินดีต้อนรับ-ไฟล์>index.jsp</ยินดีต้อนรับ-ไฟล์>
</ยินดีต้อนรับรายการไฟล์>
</เว็บแอป>
2.1.3 ชั้นเรียนทดสอบ
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ com.dheaven.mip.web;
นำเข้า javax.servlet.ServletException;
นำเข้า javax.servlet.http.HttpServlet;
นำเข้า org.apache.log4j.Logger;
InitiaServlet คลาสสาธารณะขยาย HttpServlet {
บันทึก Logger ที่มีการป้องกัน = Logger.getLogger (InitiaServlet.class);
serialVersionUID ยาวสุดท้ายคงที่ส่วนตัว = 8550329576989690578L;
-
* ตัวสร้างวัตถุ
-
สาธารณะ InitiaServlet () {
ซุปเปอร์();
-
-
* การทำลายเซิร์ฟเล็ต <br>
-
โมฆะสาธารณะทำลาย () {
ซุปเปอร์.ทำลาย();
-
-
* การเริ่มต้นของเซิร์ฟเล็ต <br>
-
* @throws ServletException หากมีข้อผิดพลาดเกิดขึ้น
-
โมฆะสาธารณะ init() พ่น ServletException {
log.debug("เซิร์ฟเวอร์เริ่มทำงานแล้ว และ log4j เริ่มทำงานแล้ว");
-
-
2.2 ไม่ใช้สถาปัตยกรรมสปริง
หากระบบไม่ใช้สปริง มาดูเซิร์ฟเล็ตเป็นตัวอย่างกัน มันง่ายมาก คุณสามารถทำตามขั้นตอนแล้ววางโค้ดเท่านั้น ไร้สาระ
2.2.1 กำหนดไฟล์การกำหนดค่า log4j
วางไว้ในไดเร็กทอรี WEB-INF ของโครงการเว็บ โดยมีเนื้อหาดังต่อไปนี้:
คัดลอกรหัสรหัส ดังต่อไปนี้:
log4j.rootCategory=ข้อมูล, stdout
log4j.rootLogger=ข้อมูล, 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{สัมบูรณ์} %5p - %m%n
### ชุดเซ็ต ###
log4j.logger.org.apache.catalina=ข้อมูล
log4j.logger.org.apache.commons.digester.Digester=ข้อมูล
log4j.logger.org.apache.catalina.startup.TldConfig=ข้อมูล
log4j.logger.com.dheaven=debug
2.2.2 สร้างคลาสการเริ่มต้น log4j
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ com.dheaven.mip.web;
นำเข้า javax.servlet.ServletException;
นำเข้า javax.servlet.http.HttpServlet;
นำเข้า org.apache.log4j.PropertyConfigurator;
คลาสสาธารณะ InitLog4j ขยาย HttpServlet {
serialVersionUID ยาวสุดท้ายแบบคงที่ส่วนตัว = 1L;
โมฆะสาธารณะ init() พ่น ServletException {
คำนำหน้าสตริง = getServletContext().getRealPath("/");
คำนำหน้า = คำนำหน้าแทนที่ ("//", "/");
ไฟล์สตริง = getInitParameter("log4j-init-file");
// หากไม่ได้ตั้งค่าไฟล์ log4j-init ก็ไม่มีประโยชน์ที่จะลอง
ถ้า (ไฟล์ != null) {
PropertyConfigurator.configure (คำนำหน้า + ไฟล์);
-
-
-
2.2.3 กำหนดคลาสการเริ่มต้นใน Web.xml
คัดลอกรหัสรหัส ดังต่อไปนี้:
<เซิร์ฟเล็ต>
<servlet-name>log4j-init</servlet-name>
<servlet-class>chb.test.web.InitLog4j</servlet-class>
<init-พารามิเตอร์>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-พารามิเตอร์>
<โหลดเมื่อเริ่มต้น>1</โหลดเมื่อเริ่มต้น>
</เซิร์ฟเล็ต>
2.2.4 ชั้นเรียนทดสอบ
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ chb.test.web;
นำเข้า javax.servlet.ServletException;
นำเข้า javax.servlet.http.HttpServlet;
นำเข้า org.apache.log4j.Logger;
InitiaServlet คลาสสาธารณะขยาย HttpServlet {
บันทึก Logger ที่มีการป้องกัน = Logger.getLogger (InitiaServlet.class);
serialVersionUID ยาวสุดท้ายคงที่ส่วนตัว = 8550329576989690578L;
-
* ตัวสร้างวัตถุ
-
สาธารณะ InitiaServlet () {
ซุปเปอร์();
-
-
* การทำลายเซิร์ฟเล็ต <br>
-
โมฆะสาธารณะทำลาย () {
ซุปเปอร์.ทำลาย();
-
-
* การเริ่มต้นของเซิร์ฟเล็ต <br>
-
* @throws ServletException หากมีข้อผิดพลาดเกิดขึ้น
-
โมฆะสาธารณะ init() พ่น ServletException {
log.debug("เซิร์ฟเวอร์เริ่มทำงานแล้ว และ log4j เริ่มทำงานแล้ว");
-
-