องค์ประกอบองค์ประกอบ Log4j
Log4j ประกอบด้วยองค์ประกอบที่สำคัญสามส่วน:
1. ลำดับความสำคัญของข้อมูลบันทึก (Logger)
2. ปลายทางเอาต์พุตของข้อมูลบันทึก (ภาคผนวก)
3. รูปแบบเอาต์พุต (เค้าโครง) ของข้อมูลบันทึก
สรุป:
ลำดับความสำคัญของข้อมูลบันทึกจากมากไปน้อย ได้แก่ ERROR, WARN, INFO และ DEBUG ซึ่งใช้เพื่อระบุความสำคัญของข้อมูลบันทึกนี้ตามลำดับ
ปลายทางเอาต์พุตของข้อมูลบันทึกจะระบุว่าบันทึกจะถูกพิมพ์ไปยังคอนโซลหรือไฟล์
รูปแบบเอาต์พุตจะควบคุมเนื้อหาที่แสดงของข้อมูลบันทึก
แนะนำ Log4j
Log4j เป็นโครงการโอเพ่นซอร์สของ Apache ด้วยการใช้ Log4j เราสามารถควบคุมปลายทางของการส่งข้อมูลบันทึกไปยังคอนโซล ไฟล์ ส่วนประกอบ GUI และแม้แต่เซิร์ฟเวอร์ซ็อกเก็ต เครื่องบันทึกเหตุการณ์ NT ภูต UNIX Syslog ฯลฯ เรายังสามารถควบคุมได้ รูปแบบผลลัพธ์ของแต่ละบันทึก โดยการกำหนดระดับของข้อมูลบันทึกแต่ละรายการ เราสามารถควบคุมกระบวนการสร้างบันทึกได้อย่างละเอียดมากขึ้น log4j-- บันทึกสำหรับ java (บันทึก java)
ที่อยู่ดาวน์โหลด Log4j: http://logging.apache.org/log4j/2.x/download.html
รูปแบบไฟล์การกำหนดค่า Log4j
Log4j รองรับไฟล์การกำหนดค่าสองรูปแบบ:
1. ไฟล์รูปแบบ XML
2. ไฟล์ในรูปแบบคุณสมบัติ
คุณไม่สามารถใช้ไฟล์การกำหนดค่าได้เลย แต่กำหนดค่าสภาพแวดล้อม Log4j ในโค้ด อย่างไรก็ตาม การใช้ไฟล์การกำหนดค่าจะทำให้แอปพลิเคชันของคุณมีความยืดหยุ่นมากขึ้น
ไฟล์การกำหนดค่าคำจำกัดความ Log4j
1. กำหนดค่า root Logger
ไวยากรณ์ของมันคือ:
คำอธิบายพารามิเตอร์:
ระดับคือลำดับความสำคัญของการบันทึก ซึ่งแบ่งออกเป็น OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL หรือระดับที่คุณกำหนด
ปิด: ระดับสูงสุด ใช้เพื่อปิดการบันทึกทั้งหมด
ร้ายแรง: บ่งชี้ว่าเหตุการณ์ข้อผิดพลาดร้ายแรงแต่ละรายการจะทำให้แอปพลิเคชันออก
ข้อผิดพลาด: บ่งชี้ว่าถึงแม้จะมีเหตุการณ์ข้อผิดพลาดเกิดขึ้น แต่ก็ยังไม่ส่งผลกระทบต่อการทำงานต่อไปของระบบ
คำเตือน: บ่งชี้ว่าสถานการณ์ข้อผิดพลาดที่อาจเกิดขึ้นจะเกิดขึ้น
ข้อมูล: โดยทั่วไปจะใช้ในระดับหยาบ โดยเน้นกระบวนการทำงานทั้งหมดของแอปพลิเคชัน
การแก้ไขข้อบกพร่อง: โดยทั่วไปและในระดับหยาบ โดยเน้นกระบวนการทำงานทั้งหมดของแอปพลิเคชัน
ทั้งหมด: ระดับต่ำสุด ใช้เพื่อเปิดการบันทึกทั้งหมด
Log4j แนะนำให้ใช้เพียงสี่ระดับเท่านั้น ลำดับความสำคัญจากมากไปน้อยคือ ERROR, WARN, INFO และ DEBUG ด้วยระดับที่กำหนดไว้ที่นี่ คุณสามารถควบคุมการเปิดและปิดระดับข้อมูลบันทึกที่เกี่ยวข้องในแอปพลิเคชันได้
appenderName หมายถึงตำแหน่งที่ข้อมูลบันทึกถูกส่งออก และสามารถระบุปลายทางเอาต์พุตหลายรายการพร้อมกันได้
2. กำหนดค่าภาคผนวกปลายทางเอาต์พุตข้อมูลบันทึก
ไวยากรณ์ของมันคือ:
log4j.appender.appenderName.option1 = ค่า 1
-
log4j.appender.appenderName.option = ค่า N
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.HTMLayout (เค้าโครงในรูปแบบตาราง 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} 2545 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:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<ชื่อผู้ผนวก = "appender1"
-
<ชื่อพารามิเตอร์ =ค่า "ไฟล์" = "logfile08.html" />
<ชื่อพารามิเตอร์ =ค่า MaxFileSize = "1MB" />
< ชื่อพารามิเตอร์ = "MaxBackupIndex" value = "5" />
<เค้าโครง>
</เค้าโครง>
</ผู้ผนวก>
<ราก>
<ค่าระดับ = "ดีบัก" />
<appender-ref ref="appender1" />
</ราก>
</log4j:การกำหนดค่า>
ก่อนที่จะใช้ Log4j ในโปรแกรม ให้อิมพอร์ต commons-logging.jar และ logging-log4j-1.2.9.jar ลงใน classpath ก่อน และใส่ log4j.properties ในไดเร็กทอรี root src หากต้องการใช้ log4j ในคลาส ขั้นแรกให้ประกาศตัวแปรคงที่ Loggerlogger=Logger.getLog("classname") ซึ่งสามารถใช้งานได้ทันที
การใช้งานมีดังนี้: logger.debug("debugmessage") หรือ logger.info("infomessage")
1. รับคนตัดไม้
ขั้นตอนแรกในการใช้ Log4j คือการขอรับตัวบันทึกซึ่งจะรับผิดชอบในการควบคุมข้อมูลบันทึก
ไวยากรณ์ของมันคือ:
publicstaticLoggergetLogger (ชื่อสตริง)
รับตัวบันทึกตามชื่อที่ระบุ และสร้างตัวบันทึกใหม่สำหรับชื่อนั้น หากจำเป็น โดยทั่วไปชื่อจะใช้ชื่อของคลาสนี้ เช่น:
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())
2. อ่านไฟล์การกำหนดค่า
หลังจากได้รับตัวบันทึก ขั้นตอนที่สองคือการกำหนดค่าสภาพแวดล้อม Log4j ไวยากรณ์คือ:
BasicConfigurator.configure(): ใช้สภาพแวดล้อม Log4j เริ่มต้นโดยอัตโนมัติและรวดเร็ว
PropertyConfigurator.configure(StringconfigFilename): อ่านไฟล์คอนฟิกูเรชันที่เขียนโดยใช้ไฟล์คุณสมบัติของ Java
DOMConfigurator.configure(Stringfilename): อ่านไฟล์การกำหนดค่าในรูปแบบ XML
3. แทรกข้อมูลบันทึก (ข้อมูลบันทึกที่จัดรูปแบบ)
เมื่อสองขั้นตอนที่จำเป็นข้างต้นเสร็จสมบูรณ์ คุณสามารถใช้คำสั่งการบันทึกที่มีลำดับความสำคัญที่แตกต่างกันเพื่อแทรกทุกที่ที่คุณต้องการบันทึกได้อย่างง่ายดาย ไวยากรณ์จะเป็นดังนี้:
Logger.debug (ข้อความวัตถุ);
Logger.info (วัตถุข้อความ);
Logger.warn (ข้อความวัตถุ);
Logger.error(วัตถุข้อความ);
การสาธิตโปรแกรม
1. ใช้โปรแกรมเพื่อส่งออกข้อมูลบันทึก
นำเข้า java.io.IOException;
นำเข้า org.apache.commons.logging.impl.Log4JLogger;
นำเข้า org.apache.log4j.BasicConfigurator;
นำเข้า org.apache.log4j.FileAppender;
นำเข้า org.apache.log4j.Layout;
นำเข้า org.apache.log4j.Level;
นำเข้า org.apache.log4j.Logger;
นำเข้า org.apache.log4j.SimpleLayout;
-
-
* @เวอร์ชัน: 1.1.1
-
* @author: Su Ruonian<a href="mailto:[email protected]">ส่งอีเมล</a>
-
* @since: 1.0 เวลาสร้าง: 2013-1-1 03:19:42 น.
-
* @function: ส่งออกบันทึกผ่านโค้ด
-
-
Log4jPrintByCode คลาสสาธารณะ {
ตัวบันทึก Logger แบบคงที่ส่วนตัว = Logger.getLogger (Log4jPrintByCode.class);
รูปแบบเค้าโครงส่วนตัว = SimpleLayout ใหม่ ();
FileAppender ส่วนตัว fileAppender;
//ใช้การพึ่งพาการก่อสร้างและเริ่มต้นเมื่อสร้างวัตถุ
Log4jPrintByCode สาธารณะ (เค้าโครงเค้าโครง ระดับระดับ สตริง distDir){
BasicConfigurator.configure(); //ใช้ข้อมูลการกำหนดค่าเริ่มต้น ไม่จำเป็นต้องเขียน log4j.properties
พยายาม {
init(เค้าโครง,ระดับ,distDir);
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
-
-
โมฆะสาธารณะ init (เค้าโครงเค้าโครง ระดับระดับ สตริง distDir) ส่งข้อยกเว้น {
logger.setLevel(level); //ตั้งค่าระดับเอาท์พุตของบันทึก
fileAppender = FileAppender ใหม่ (เค้าโครง, distDir, false);
logger.addAppender(fileAppender); //เพิ่มเทอร์มินัลเอาต์พุต
-
โมฆะสาธารณะคงหลัก (สตริง [] args) {
รูปแบบ SimpleLayout = SimpleLayout ใหม่ ();
สตริง logDir = "log4jcode.Log";
Log4jPrintByCode log4jCode = Log4jPrintByCode ใหม่ (เค้าโครง, Level.INFO, logDir);
//ข้อมูลต่อไปนี้จะถูกส่งออก
log4jCode.logger.info("บันทึกข้อมูลพิมพ์โดย log4j");
log4jCode.logger.warn("บันทึกเตือนการพิมพ์โดย log4j");
log4jCode.logger.error("บันทึกข้อผิดพลาดในการพิมพ์โดย log4j");
-
เค้าโครงสาธารณะ getLayout() {
เค้าโครงการส่งคืน;
-
setLayout โมฆะสาธารณะ (เค้าโครงเค้าโครง) {
this.layout = เค้าโครง;
-
FileAppender สาธารณะ getFileAppender () {
ส่งคืนไฟล์Appender;
-
โมฆะสาธารณะ setFileAppender (FileAppender fileAppender) {
this.fileAppender = ไฟล์ Appender;
-
-
// บันทึกข้อมูลระดับข้อมูล
ถ้า (logger.isInfoEnabled()) {
logger.info("นี่คือข้อความข้อมูลจาก Dao");
-
2.Log4J ส่งออกข้อมูลบันทึกเดียวกันไปยังหลายปลายทาง
/* สลับฐานข้อมูล */
ใช้ db_log4j;
/* ตารางข้อมูลบันทึก */
สร้างตาราง tb_log(
logId int ไม่ใช่ความคิดเห็น auto_increation null 'หมายเลขซีเรียล'
createDate varchar (45) ความคิดเห็นที่เป็นโมฆะเริ่มต้น 'เวลาสร้างบันทึก'
เธรด varchar (45) ความคิดเห็นที่เป็นโมฆะเริ่มต้น 'เธรดปัจจุบัน'
ระดับ varchar (45) ความคิดเห็นที่เป็นโมฆะเริ่มต้น 'ระดับบันทึกปัจจุบัน'
คลาส varchar (45) ความคิดเห็นที่เป็นโมฆะเริ่มต้น 'สร้างคลาสบันทึก'
ข้อความ varchar (245) ความคิดเห็นที่เป็นโมฆะเริ่มต้น 'บันทึกข้อมูลเฉพาะ'
คีย์หลัก (logId)
-
อินสแตนซ์ของแอปพลิเคชันจะส่งข้อมูลบันทึกไปยังคอนโซล ไฟล์ และฐานข้อมูลพร้อมกัน
สร้างฐานข้อมูลและตาราง
/* สลับฐานข้อมูล */
ใช้ db_log4j;
/* ตารางข้อมูลบันทึก */
สร้างตาราง tb_log(
logId int ไม่ใช่ความคิดเห็น auto_increation null 'หมายเลขซีเรียล'
createDate varchar (45) ความคิดเห็นที่เป็นโมฆะเริ่มต้น 'เวลาสร้างบันทึก'
เธรด varchar (45) ความคิดเห็นที่เป็นโมฆะเริ่มต้น 'เธรดปัจจุบัน'
ระดับ varchar (45) ความคิดเห็นที่เป็นโมฆะเริ่มต้น 'ระดับบันทึกปัจจุบัน'
คลาส varchar (45) ความคิดเห็นที่เป็นโมฆะเริ่มต้น 'สร้างคลาสบันทึก'
ข้อความ varchar (245) ความคิดเห็นที่เป็นโมฆะเริ่มต้น 'บันทึกข้อมูลเฉพาะ'
คีย์หลัก (logId)
-
#กำหนดเอาต์พุต A1 ไปยังคอนโทรลเลอร์
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#กำหนดโหมดโครงร่างของ 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
#กำหนดความยาวสูงสุดของไฟล์เอาต์พุต A2
log4j.appender.A2.MaxFileSize = 1KB
#กำหนดจำนวนไฟล์สำรองสำหรับ A2
log4j.appender.A2.MaxBackupIndex = 3
#กำหนดโหมดเค้าโครงของ 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
#กำหนดเอาต์พุต 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
#กำหนดเค้าโครงของ A3 และคำสั่ง SQL ที่ดำเนินการ
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=แทรกเข้าไปในค่า tb_log(createDate,thread,level,class,message)('%d','%t','%-5p','%c','%m ')
นำเข้า org.apache.log4j.Logger;
นำเข้า org.apache.log4j.PropertyConfigurator;
-
-
* @เวอร์ชัน: 1.1.1
-
* @author: Su Ruonian<a href="mailto:[email protected]">ส่งอีเมล</a>
-
* @since: 1.0 เวลาสร้าง: 2013-1-1 04:13:59 PM
-
* @function: ควบคุมการส่งออกข้อมูลบันทึกไปยังปลายทางหลายแห่งผ่านไฟล์การกำหนดค่า
-
-
Log4jPrintByConfigure คลาสสาธารณะ {
ตัวบันทึก Logger แบบคงที่ส่วนตัว = Logger.getLogger (Log4jPrintByConfigure.class);
โมฆะคงที่สาธารณะ main (String [] args) พ่นข้อยกเว้น {
//โหลดไฟล์การกำหนดค่าบันทึก log4j.properties
PropertyConfigurator.configure("configure/log4j.properties");//ไฟล์ถูกจัดเก็บไว้ในโฟลเดอร์ configuration ในไดเร็กทอรีเดียวกันกับ src
//หากวางไว้ใต้ src พารามิเตอร์ควรเป็น "bin/log4j.properties" หรือ "src/log4j.properties" ขอแนะนำให้ใช้ bin เป็นมาตรฐาน
//ข้อมูลต่อไปนี้จะถูกพิมพ์ออกมา
logger.debug("คนบันทึกพิมพ์ DEBUG Messgae");
logger.info("บันทึกพิมพ์ข้อความข้อมูล");
logger.warn("บันทึกพิมพ์ข้อความเตือน");
logger.error("บันทึกการพิมพ์ข้อความแสดงข้อผิดพลาด");
logger.fatal("นี่คือข้อความ FATAL");
-
-