เมื่อโปรแกรมพื้นหลังได้รับการพัฒนาและเปิดตัวการพิมพ์ข้อมูลบันทึกและการบันทึกบันทึกบันทึกจะถูกใช้โดยทั่วไป ในระหว่างการพัฒนาการพิมพ์ข้อมูลบันทึกสามารถค้นหาปัญหาได้อย่างรวดเร็วและช่วยให้เราพัฒนาได้อย่างรวดเร็ว หากข้อผิดพลาดหรือข้อผิดพลาดเกิดขึ้นหลังจากโปรแกรมออนไลน์จำเป็นต้องมีบันทึกการบันทึกเพื่อค้นหาปัญหา
Spring Boot สามารถรวมระบบการบันทึกที่แตกต่างกันมากมายซึ่ง Apache Log4J ที่ใช้กันมากที่สุดและ Log4J 2 เป็นเวอร์ชันที่อัพเกรดของ Log4J ซึ่งได้ทำการปรับปรุงที่สำคัญมากมายเมื่อเทียบกับ log4j 1.x ดังนั้นบล็อกนี้จะพูดคุยโดยตรงเกี่ยวกับวิธีที่ Spring Boot รวมและกำหนดค่า log4j2
1. นำเข้าแพ็คเกจ log4j2
หากคุณใช้ Gradle ให้เพิ่มการพึ่งพาต่อไปนี้ในไฟล์ build.gradle วิธีการ Gradle ใช้ในรหัสตัวอย่าง
การพึ่งพา {// log4j2 compile "org.apache.logging.log4j: log4j-api: 2.8" Compile "org.apache.logging.log4j: log4j-core: 2.8" // ใช้เพื่อสนับสนุน async คอมไพล์ใน logger 'com.lmax: 3.3.6'หากคุณใช้ maven ให้เพิ่มการพึ่งพาต่อไปนี้ในไฟล์ pom.xml
<การพึ่งพา> <การพึ่งพา> <roupId> org.apache.logging.log4j </groupId> <ratifactId> log4j-api </artifactid> <persion> 2.8 </version> </derctive> <cersion> 2.8 </version> </derctency> <การพึ่งพา> <roupId> com.lmax </groupId> <ratifactId> disruptor </artifactid> <version> 3.3.6 </เวอร์ชัน>
2. เพิ่มไฟล์กำหนดค่า log4j2
สร้างไฟล์ log4j2.xml ในไดเรกทอรีรูทของไฟล์ทรัพยากรทรัพยากรของโครงการและคัดลอกรหัสต่อไปนี้ลงในไฟล์
<? xml version = "1.0" encoding = "utf-8"?> <!-สถานะหลังการกำหนดค่าใช้เพื่อตั้งค่าเอาต์พุตข้อมูลภายใน log4j2 เอง ไม่สามารถตั้งค่าได้ เมื่อมีการตั้งค่าให้ติดตามคุณจะเห็นเอาต์พุตรายละเอียดต่าง ๆ ภายใน log4j2 สามารถตั้งค่าเป็นปิด (ปิด) หรือข้อผิดพลาด (เฉพาะข้อมูลข้อผิดพลาดในการส่งออก)-> <configurationStatus = "ปิด"> <!-บันทึกไดเรกทอรีไฟล์และการกำหนดค่าไดเรกทอรีไฟล์ที่บีบอัด-> <properties> <porementName = "filename">/home/kylin/log/knight/Spring_log </properties> <Appenders> <!-การกำหนดค่าสำหรับการบันทึกคอนโซลเอาท์พุท-> <consolename = "คอนโซล" target = "system_out"> <!-คอนโซลเท่านั้นที่ส่งออกข้อมูลระดับและสูงกว่า (onMatch) <patternLayoutPattern = " %d {hh: mm: ss.sss} [ %t] %-5level %logger {36}- %msg %n"/> </sonsole> <!- พิมพ์ข้อมูลทั้งหมด ทุกครั้งที่ขนาดมีขนาดเกินขนาดบันทึกขนาดนี้จะถูกเก็บไว้โดยอัตโนมัติในโฟลเดอร์ที่สร้างขึ้นโดยปีและบีบอัดเป็นไฟล์เก็บถาวร-> <rollingRandomAccessFilename = "infofile" filename = "$ {filename} /web-info.log" ทันที filePattern = "$ {filegz}/$$ {วันที่: yyyy-mm}/app- %d {mm-dd-yyyy}- %i.web-info.gz"> <patternlayoutpattern = " %d {yyyy-mm-dd ' %msg%xex%n "/> <policies> <timebasedTriggeringPolicyInterval =" 6 "modulate =" true "/> <sizebasedtriggeringPolicysize =" 50 MB "/> </นโยบาย> <filters> <! <thresholdFilterLevel = "info" onMatch = "ยอมรับ" onMismatch = "ปฏิเสธ"/> </ตัวกรอง> <!-ระบุจำนวนสูงสุดของแพ็คเก็ตบีบอัดต่อวันเริ่มต้น 7 ถ้ามันเกินกว่าก่อนหน้านี้ <rollingRandomAccessFileName = "errorfile" filename = "$ {filename}/web-error.log" retimateFlush = "false" filepattern = "$ {filegz}/$$ {วันที่: yyyy-mm}/app-%d {mm-dd-yyy <patternlayoutpattern = " %d {yyyyy-mm-dd 'ที่' hh: mm: ss z} [ %t] %-5level %logger {36} %l %m- %msg %xex %n"/> <policies> </policies> <filters> <!-บันทึกข้อมูลระดับข้อผิดพลาดเท่านั้น-> <thresholdFilterLevel = "ข้อผิดพลาด" onMatch = "ยอมรับ" onMismatch = "ปฏิเสธ"/> </ตัวกรอง> <!-ระบุจำนวนสูงสุดของการบีบอัดแพ็กเก็ตต่อวัน </rollingRandomAccessFile> </appenders> <!-ระบุจำนวนสูงสุดของแพ็กเก็ตบีบอัดต่อวันค่าเริ่มต้นคือ 7 และอันก่อนหน้านี้จะถูกเขียนทับ-> <defaultrolloverstrategymax = "50"/> </rollingrandomaccessfile> Asyncroot - การบันทึกแบบอะซิงโครนัส - ต้องการการสนับสนุนจาก lmax disruptor -> <syncrootlevel = "info" additivity = "false"> <AppenderRefref = "คอนโซล"/> <AppenderRefRef = "infofile"/>3. เขียน log4j2 คลาสเสริม
หลังจากทำการกำหนดค่าข้างต้นเราสามารถเขียนคลาสเสริมเพื่อให้สะดวกยิ่งขึ้นสำหรับเราที่จะใช้ log4j2 เพื่อบันทึกบันทึก
สร้างไฟล์คลาส L.Java ในแพ็คเกจ UTILS
แพ็คเกจ com.spring.log4j2.utils; นำเข้า org.apache.logging.log4j.logmanager; นำเข้า org.apache.logging.log4j.logger;/*** คลาส Auxiliary Logger************** */คลาสสาธารณะ {ส่วนตัว logger สุดท้ายคงที่ logger = logManager.getLogger (); Privatel () { / * ไม่สามารถสร้างอินสแตนซ์ * / โยน unsupportedoperationException ใหม่ ("ไม่สามารถสร้างอินสแตนซ์"); } PublicStaticLogGerGetLogger () {return logger; } PublicStaticVoidt (String msg) {logger.trace (msg); } PublicStaticVoidd (String msg) {logger.debug (msg); } PublicStaticVoidi (String msg) {logger.info (msg); } PublicStaticVoidw (String msg) {logger.warn (msg); } PublicStaticVoide (String msg) {logger.error (msg); -หลังจากเขียนคลาสเสริมมันใช้งานง่ายมากและสามารถใช้งานได้ง่ายผ่านรหัสต่อไปนี้
@ControllerPublic classwebcontroller {@requestmapping ("/") PublicStringIndex () {String msg = "การกำหนดค่าและการใช้งานของ log4j2 ในซีรีย์สปริงบูต"; lt (msg); LD (MSG); Li (msg); LW (MSG); Le (MSG); กลับ "ดัชนี"; -คลาสเสริมที่นี่เพียงแค่เขียนวิธีการใช้งานพื้นฐานบางอย่างคุณสามารถปรับแต่งตามความต้องการของคุณและเพิ่มวิธีการเสริมเพิ่มเติม สำหรับวิธีการที่ไม่ได้ให้ไว้ในคลาส Helper คุณยังสามารถใช้วิธี L.GetLogger () เพื่อให้อินสแตนซ์ Logger ใช้งานได้
4. การตรวจสอบผลลัพธ์
การจัดอันดับระดับของบันทึก: trace <debug <info <warn <error <fatal
เพราะระดับใน log4j2 ของฉันถูกตั้งค่าเป็นระดับข้อมูล ดังนั้นจึงมีเพียงสามระดับของข้อมูลเตือนและข้อผิดพลาดในข้อมูลการพิมพ์ (ข้อมูลในระดับร้ายแรงไม่ได้ถูกพิมพ์มิฉะนั้นจะเห็นได้)
ข้อมูลการพิมพ์จะแสดงในรูปด้านล่าง:
ในเวลาเดียวกันไฟล์บันทึกถูกสร้างขึ้นในระบบคอมพิวเตอร์ดังที่แสดงในรูปด้านล่าง:
โดยการสังเกตเส้นทางคุณจะพบว่าเส้นทางนี้เป็นเส้นทางที่ตั้งไว้ใน log4j2.xml:
<!-บันทึกไดเรกทอรีไฟล์และการกำหนดค่าไดเรกทอรีไฟล์บีบอัด-> <properties> <propertyName = "filename">/home/kylin/log/knight/spring_log </property> <porementname = "filegz">/home/kylin/log/knight/spring_log/7z
5. เพิ่มเติม
ที่อยู่ GitHub ของ log4j2: https://github.com/apache/logging-log4j2
ที่อยู่รหัสตัวอย่างของบทช่วยสอนนี้: https://github.com/dkylin/springboot-sample/tree/master/springboot-log4j2
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น