log4j outputs ไฟล์บันทึกที่กำหนดเองหลายไฟล์
หากคุณต้องการส่งออกไฟล์บันทึกอิสระในแอปพลิเคชันจริงคุณจะแยกเนื้อหาที่ต้องการออกจากบันทึกต้นฉบับและฟอร์มไฟล์บันทึกแยกต่างหากได้อย่างไร
ก่อนอื่นให้ดูที่ไฟล์ log4j.properties ทั่วไปซึ่งบันทึกบันทึกในไฟล์คอนโซลและ test.log:
การคัดลอกรหัสมีดังนี้:
log4j.rootlogger = debug, stdout, logfile
log4j.appender.stdout = org.apache.log4j.consoleAppender
log4j.appender.stdout.layout = org.apache.log4j.patternlayout
log4j.appender.stdout.layout.conversionPattern =%d%p [%c] -%m%n
log4j.appender.logfile = org.apache.log4j.rollingFileAppender
log4j.appender.logfile.file = log/test.log
log4j.appender.logfile.MaxFilesize = 128MB
log4j.appender.logfile.maxbackupindex = 3
log4j.appender.logfile.layout = org.apache.log4j.patternlayout
log4j.appender.logfile.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n n
จะเกิดอะไรขึ้นถ้าไฟล์บันทึกหลายไฟล์จำเป็นต้องส่งออกในคลาสเดียวกัน? อันที่จริงแล้วความจริงก็เหมือนกัน
การคัดลอกรหัสมีดังนี้:
Logger Logger1 = logfactory.getLog ("MyLogger1");
Logger Logger 2 = logfactory.getLog ("MyLogger2");
การกำหนดค่าใน log4j.properties มีดังนี้:
การคัดลอกรหัสมีดังนี้:
log4j.logger.mylogger1 = debug, test1
log4j.appender.test1 = org.apache.log4j.fileAppender
log4j.appender.test1.file = log/test1.log
log4j.appender.test1.layout = org.apache.log4j.patternlayout
log4j.appender.test1.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n n
log4j.logger.mylogger2 = debug, test2
log4j.appender.test2 = org.apache.log4j.fileAppender
log4j.appender.test2.file = log/test2.log
log4j.appender.test2.layout = org.apache.log4j.patternlayout
log4j.appender.test2.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n n
ควรใช้บันทึกที่แตกต่างกันสำหรับบันทึกที่แตกต่างกัน (ตัวอย่างเช่น logger1.info ("ABC") ควรใช้สำหรับการส่งออกไปยัง test1.log)
ปัญหาอีกประการหนึ่งคือบันทึกที่กำหนดเองเหล่านี้จะถูกส่งไปยังบันทึกที่กำหนดค่าโดย log4j.rootlogger โดยค่าเริ่มต้น ไม่ต้องกังวลนี่คือสวิตช์:
log4j.additivity
มันถูกใช้เพื่อตั้งค่าว่าจะส่งออกไปยังบันทึกที่กำหนดค่าโดย log4j.rootlogger ในเวลาเดียวกัน
อย่างไรก็ตามวิธีนี้มีข้อบกพร่องเล็ก ๆ น้อย ๆ นั่นคือชื่อคลาสในบันทึกที่พิมพ์สามารถเป็น mylogger หรือ mylogger2 ได้เท่านั้น
2 เส้นทางการกำหนดค่าแบบไดนามิก
หากเส้นทางการบันทึกที่ต้องการโดยโปรแกรมจะต้องมีการเปลี่ยนแปลงอย่างต่อเนื่องและเป็นไปไม่ได้ที่จะเปลี่ยนไฟล์การกำหนดค่าทุกครั้งคุณสามารถใช้ตัวแปรสภาพแวดล้อมเพื่อแก้ปัญหาได้
การกำหนดค่าของ log4j มีดังนี้:
การคัดลอกรหัสมีดังนี้:
log4j.rootlogger = debug, infolog, debuglog
#info log
log4j.appender.infolog = org.apache.log4j.dailyrollingFileAppender
log4j.appender.infolog.file = $ {log.dir}/$ {log.info.file}
log4j.appender.infolog.datePattern = .yyyy-mm-dd
log4j.appender.infolog.threshold = ข้อมูล
log4j.appender.infolog.layout = org.apache.log4j.patternlayout
log4j.appender.infolog.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n
#debug log
log4j.appender.debuglog = org.apache.log4j.rollingFileAppender
log4j.appender.debuglog.file = $ {log.dir}/$ {log.debug.file}
log4j.appender.debuglog.threshold = debug
log4j.appender.debuglog.maxfilesize = 128mb
log4j.appender.debuglog.maxbackupindex = 3
log4j.appender.debuglog.layout = org.apache.log4j.patternlayout
log4j.appender.debuglog.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n n n
ในเวลานี้ก่อนที่จะใช้บันทึกเพื่อพิมพ์บันทึกคุณต้องใช้ระบบเพื่อกำหนดพา ธ เอาต์พุตและตัวแปรสภาพแวดล้อมชื่อไฟล์:
การคัดลอกรหัสมีดังนี้:
System.SetProperty ("log.dir", logdir);
System.SetProperty ("log.info.file", infologfilename);
System.SetProperty ("log.debug.file", debuglogfilename);
ไฟล์แนบ: รูปแบบความหมายของพารามิเตอร์รูปแบบ
%C ชื่อเต็มของคลาสที่ข้อมูลบันทึกเป็นของ
%D ส่งออกวันที่หรือเวลาของเวลาบันทึก : 2013-8-19- 22:10:28
%f ชื่อคลาสของคลาสที่ข้อมูลบันทึกเป็นของ
%l เหตุการณ์บันทึกเอาต์พุตเกิดขึ้นนั่นคือคำสั่งที่เอาต์พุตข้อมูลบันทึกอยู่ในแถวของคลาสที่อยู่
%m ส่งออกข้อมูลที่ระบุในรหัสเช่นข้อความในบันทึก (ข้อความ)
%n เอาต์พุตการแบ่งสายคืนรถแพลตฟอร์ม Windows คือ "/r/n" และแพลตฟอร์ม Unix คือ "/n"
ลำดับความสำคัญของเอาต์พุต P, เช่นการดีบัก, ข้อมูล, เตือน, ข้อผิดพลาด, ร้ายแรง หากเป็นเอาท์พุทโดยการเรียก Debug () มันเป็นการดีบักและอื่น ๆ
%R เอาต์พุตจำนวนมิลลิวินาทีที่ใช้ตั้งแต่เริ่มต้นแอปพลิเคชันเพื่อส่งออกข้อมูลบันทึก
%T เอาต์พุตชื่อเธรดที่สร้างเหตุการณ์บันทึก