4.1 รายการระดับการบันทึก
คุณเขียนโปรแกรมของคุณ อัปโหลดไปยังเซิร์ฟเวอร์ จากนั้นคุณก็เริ่มมีคำถามทันที:
- จะแน่ใจได้อย่างไรว่า
debug()
วิธีการนั้นใช้ไม่ได้ขณะทำงานในproduction
? - มีข้อมูลมากเกินไปในบันทึก คุณต้องการฝากไว้เฉพาะข้อความแสดงข้อผิดพลาดหรือไม่
- จะดูบันทึกโดยละเอียดสำหรับส่วนหนึ่งของแอปพลิเคชันได้อย่างไร
แน่นอนว่าผู้สร้างท่อนซุงต้องเผชิญกับสิ่งเดียวกันเมื่อหลายสิบปีก่อน ฉันจะไม่บอกคุณว่าปัญหานี้แก้ไขได้อย่างไรในภาษา C แต่ในภาษา Java มันแก้ไขได้อย่างสวยงามมาก
บันทึกจะกรองข้อมูลก่อนที่จะเขียนข้อมูลไปยัง คุณสามารถลด/เพิ่มรายละเอียดของบันทึกได้อย่างรวดเร็วโดยการตั้งค่าระดับการบันทึก ระดับเหล่านี้อธิบายไว้ในตารางด้านล่าง:
ระดับ | บันทึก | |
---|---|---|
1 | ทั้งหมด | บันทึกข้อความทั้งหมด |
2 | ติดตาม | ข้อความขนาดเล็กเมื่อทำการดีบั๊ก |
3 | ดีบัก | ข้อความที่สำคัญสำหรับการดีบัก |
4 | ข้อมูล | ข้อความง่ายๆ |
5 | เตือน | เขียนเฉพาะร้ายแรง ข้อผิดพลาด และคำเตือน |
6 | ข้อผิดพลาด | เขียนเฉพาะข้อผิดพลาดและข้อผิดพลาดร้ายแรง |
7 | ร้ายแรง | เขียนข้อผิดพลาดร้ายแรงเท่านั้น |
8 | ปิด | อย่าเขียนข้อความลงในบันทึก |
ระดับเหล่านี้ใช้เมื่อกรองข้อความ หากคุณตั้งค่าระดับการบันทึกเป็นข้อความWARN
ทั้งหมดที่สำคัญน้อยกว่าWARN
จะถูกยกเลิก: TRACE
, DEBUG
, INFO
หากคุณตั้งค่าระดับการกรองเป็นFATAL
แม้แต่ERROR
มีระดับความรุนแรงอีกสองระดับที่ใช้ในการกรอง - ระดับนี้OFF
(ละทิ้งข้อความทั้งหมด) และALL
- เขียนข้อความทั้งหมด (ละทิ้งอะไรเลย)
4.2 ตัวอย่างการตั้งค่าบันทึก
ลองดูตัวอย่างการตั้งค่าบันทึกอย่างง่าย ในการทำเช่นนี้ เราจำเป็นต้องมีไฟล์ log4j.properties ซึ่งสามารถวางไว้ในโฟลเดอร์ทรัพยากร มาเพิ่มเนื้อหาต่อไปนี้กันเถอะ:
# Root logger option
log4j.rootLogger=WARN, stdout
# Direct log messages to 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{yyyy-MM-dd HH:mm:ss}
ที่นี่ในบรรทัดแรกเราตั้งค่าระดับการบันทึก - WARN
. และนั่นหมายความว่าข้อความที่เขียนถึงตัวบันทึกที่มีสถานะDEBUG
จะINFO
ถูกละเว้น
- ระบุประเภทของ appender ที่เราจะใช้ -
ConsoleAppender
- ระบุตำแหน่งที่เราจะเขียนบันทึก -
System.out
- เรากำหนดคลาสที่จะควบคุมรูปแบบการบันทึก -
PatternLayout
- กำหนดรูปแบบการบันทึกสำหรับข้อความทั้งหมด - วันที่และเวลา
4.3 ข้อผิดพลาดในการบันทึกยอดนิยม
และอีกหนึ่งจุดสำคัญ - ข้อผิดพลาดยอดนิยมในการบันทึก ไม่มีตัวเลือกมากมายในการทำบางสิ่ง แต่สามารถระบุข้อผิดพลาดทั่วไปหลายประการ:
- เข้าสู่ระบบมากเกินไป คุณไม่ควรบันทึกทุกขั้นตอน ซึ่งในทางทฤษฎีอาจมีความสำคัญ มีกฎ: บันทึกสามารถโหลดประสิทธิภาพได้ไม่เกิน 10 % มิฉะนั้นจะมีปัญหาด้านประสิทธิภาพ
- บันทึกข้อมูลทั้งหมดลงในไฟล์เดียว ซึ่งจะทำให้อ่าน/เขียนได้ยากมากในบางจุด ไม่ต้องพูดถึงว่ามีการจำกัดขนาดไฟล์ในบางระบบ
- ใช้ระดับการบันทึกที่ไม่ถูกต้อง การบันทึกแต่ละระดับมีขอบเขตที่ชัดเจน และควรได้รับการเคารพ หากขอบเขตไม่ชัดเจน คุณสามารถตกลงกันได้ว่าจะใช้ระดับใด