ภายใต้ Spring Boot ฉันพยายามใช้ log4j เพื่อเข้าสู่ระบบและเพิ่มไฟล์ log4j.properties ในไดเรกทอรี SRC/Main/Resources เพื่อปรับแต่งไฟล์บันทึกเอาต์พุต แต่มันล้มเหลว การกำหนดค่าเส้นทางการบันทึกใน Application.yml การพิมพ์บันทึกถูกพิมพ์สำเร็จ แต่การบันทึกไฟล์บันทึกล้มเหลวที่จะทำการดีบักสำเร็จ ฉันตรวจสอบข้อมูลออนไลน์และกล่าวว่า Spring Boot ใช้ logback เพื่อบันทึกบันทึกตามค่าเริ่มต้น หลังจากความพยายามหลายครั้ง Log4j ล้มเหลวดังนั้นเขาจึงเปลี่ยนเป็น logback เป็นบันทึกและการทดสอบขั้นสุดท้ายก็ประสบความสำเร็จ
1. คุณมีคำถามเกี่ยวกับเส้นทางของไฟล์บันทึกการบูตสปริงหรือไม่?
คุณสมบัติการบันทึกและการบันทึกคุณสมบัติไฟล์ได้รับการกำหนดค่าในเวลาเดียวกันดังนี้:
การบันทึก: พา ธ : /var /log ไฟล์: test.log
เฉพาะไฟล์ test.log เท่านั้นที่จะถูกสร้างขึ้นภายใต้เส้นทางรูทของโครงการและไฟล์บันทึกจะไม่ถูกสร้างขึ้นภายใต้พา ธ ที่ระบุ (เส้นทางบันทึกที่คาดหวังคือ: logging.path + logging.file)
เหตุผล: ใน Spring Boot คุณจะต้องกำหนดค่าหนึ่งในสองคุณสมบัติ: logging.path และ logging.file หากกำหนดค่าในเวลาเดียวกันให้ใช้แอตทริบิวต์ Logging.File
เมื่อมีการกำหนดค่าคุณสมบัติ loggin.Path ไฟล์ spring.log จะถูกสร้างขึ้นในเส้นทางนี้นั่นคือชื่อไฟล์บันทึกเริ่มต้นสปริง. ล็อกจะถูกใช้ในเวลานี้
เมื่อกำหนดค่าคุณสมบัติ loggin.file ไฟล์บันทึกที่มีชื่อที่ระบุจะถูกสร้างขึ้นภายใต้เส้นทางที่ระบุ ค่าเริ่มต้นคือเส้นทางสัมพัทธ์ของโครงการและคุณสามารถระบุเส้นทางที่แน่นอนสำหรับการบันทึกไฟล์
การบันทึก:
เส้นทาง:/var/logs # สร้างไฟล์ Spring.log ใน/var/logs ไดเรกทอรีไฟล์: /var/logs/test.log # สร้างไฟล์ test.log ในไดเรกทอรี/var/logs
2. เหตุผลในการเข้าสู่ระบบเพื่อแทนที่ log4j:
นี่คือข้อความที่ตัดตอนมาจากอินเทอร์เน็ต:
logback และ log4j คล้ายกันมาก หากคุณคุ้นเคยกับ log4j การเข้าสู่ระบบจะเป็นเรื่องง่ายมากที่จะชินกับมัน ต่อไปนี้เป็นข้อดีของการเข้าสู่ระบบมากกว่า log4j:
1. เคอร์เนลที่ใช้การลงชื่อเข้าใช้เร็วขึ้นได้รับการเขียนใหม่และประสิทธิภาพได้รับการปรับปรุงมากกว่า 10 ครั้งในเส้นทางการดำเนินการที่สำคัญบางอย่าง ยิ่งไปกว่านั้นการกลับเข้าสู่ระบบไม่เพียง แต่ปรับปรุงประสิทธิภาพ แต่ยังโหลดหน่วยความจำเริ่มต้นด้วย
2. การทดสอบการทดสอบที่เพียงพอมากหลังจากผ่านไปหลายปีหลายชั่วโมงของการทดสอบ การทดสอบของ Logback นั้นแตกต่างอย่างสิ้นเชิง ในมุมมองของผู้เขียนมันเป็นเรื่องสำคัญที่จะต้องเลือก logback แทน log4j
3. Logback-Classic ใช้ SLF4J ตามธรรมชาติมาก Logback-Classic ใช้ SLF4J เมื่อใช้ SLF4J คุณไม่สามารถแม้แต่จะรู้สึกถึงการบันทึกแบบคลาสสิก และเนื่องจาก logback-classic ใช้ SLF4J อย่างเป็นธรรมชาติการเปลี่ยนเป็น log4j หรืออื่น ๆ จึงเป็นเรื่องง่ายมาก มันก็โอเคที่จะจัดเตรียมไว้ในแพ็คเกจ JAR อื่นและไม่จำเป็นต้องแตะรหัสที่ใช้ผ่าน SLF4JAPI
4. เอกสารที่เพียงพอมากเว็บไซต์ทางการมีเอกสารมากกว่า 200 หน้า
5. โหลดไฟล์การกำหนดค่าซ้ำโดยอัตโนมัติ เมื่อมีการแก้ไขไฟล์การกำหนดค่า Logback-Classic สามารถโหลดไฟล์การกำหนดค่าซ้ำโดยอัตโนมัติ กระบวนการสแกนนั้นรวดเร็วและปลอดภัยและไม่จำเป็นต้องสร้างเธรดการสแกนอื่น เทคโนโลยีนี้มั่นใจได้อย่างเต็มที่ว่าแอปพลิเคชันสามารถทำงานได้อย่างมีความสุขในสภาพแวดล้อมของ JEE
6. Lilith, Lilith เป็นผู้สังเกตการณ์ของเหตุการณ์บันทึกคล้ายกับ Log4j Chainsaw Lilith ยังสามารถประมวลผลข้อมูลบันทึกจำนวนมาก
7. โหมดข้อควรระวังและการกู้คืนที่เป็นมิตรมาก ในโหมดข้อควรระวังอินสแตนซ์ FileAppender หลายรายการทำงานภายใต้ JVM หลายตัวและสามารถเขียนไฟล์บันทึกเดียวกันได้อย่างปลอดภัย RollingFileAppender จะมีข้อ จำกัด บางประการ FileAppender ของ Logback และคลาสย่อยรวมถึง RollingFileAppender สามารถกู้คืนจากข้อยกเว้น I/O ที่เป็นมิตรมาก
8. ไฟล์การกำหนดค่าสามารถจัดการกับสถานการณ์ที่แตกต่างกัน นักพัฒนามักจะต้องตัดสินว่าไฟล์การกำหนดค่าการเข้าสู่ระบบที่แตกต่างกันอยู่ในสภาพแวดล้อมที่แตกต่างกัน (การพัฒนาการทดสอบการผลิต) และไฟล์การกำหนดค่าเหล่านี้แตกต่างกันเพียงเล็กน้อยเท่านั้นและสามารถนำไปใช้งานได้และเพื่อให้ไฟล์การกำหนดค่าสามารถปรับให้เข้ากับสภาพแวดล้อมที่หลากหลาย
9. ตัวกรองบางครั้งจำเป็นต้องวินิจฉัยปัญหาและเข้าสู่ระบบ ใน log4j ระดับบันทึกสามารถลดลงได้เท่านั้น แต่สิ่งนี้จะสร้างบันทึกจำนวนมากและจะส่งผลกระทบต่อประสิทธิภาพของแอปพลิเคชัน ในการเข้าสู่ระบบคุณสามารถรักษาระดับบันทึกไว้ต่อไปและกำจัดสถานการณ์พิเศษบางอย่าง ตัวอย่างเช่นผู้ใช้ที่ลงชื่อเข้าใช้บันทึกของเธอจะถูกตีที่ระดับการดีบักและผู้ใช้รายอื่นสามารถถูกตีต่อไปในระดับเตือน ในการใช้ฟังก์ชั่นนี้จำเป็นต้องมีการกำหนดค่า XML เพียง 4 บรรทัดเท่านั้น คุณสามารถอ้างถึง MDCFilter
10. SiftingAppender (Appender Multifunctional มาก) สามารถใช้เพื่อแยกไฟล์บันทึกตามพารามิเตอร์การรันใด ๆ ที่กำหนด ตัวอย่างเช่น SiftingAppender สามารถแยกเหตุการณ์บันทึกจากการติดตามไปยังเซสชันของผู้ใช้และจากนั้นผู้ใช้แต่ละคนจะมีไฟล์บันทึก
11. บีบอัดบันทึกที่พิมพ์โดยอัตโนมัติ เมื่อมีการสร้างไฟล์ใหม่ไฟล์บันทึกที่พิมพ์จะถูกบีบอัดโดยอัตโนมัติ การบีบอัดเป็นกระบวนการแบบอะซิงโครนัสดังนั้นแม้กระทั่งไฟล์บันทึกขนาดใหญ่แอปพลิเคชันจะไม่ได้รับผลกระทบในกระบวนการบีบอัด
12. สแต็กทรีมีแพ็คเกจเวอร์ชัน Logback จะนำข้อมูลแพ็คเกจเมื่อเผยแพร่
13. ลบไฟล์บันทึกเก่าโดยอัตโนมัติ โดยการตั้งค่าคุณสมบัติ maxhistory ของ timebasedrollingpolicy หรือ sizeandtimebasedfnatp คุณสามารถควบคุมจำนวนไฟล์บันทึกสูงสุดที่สร้างขึ้น หากตั้งค่า MaxHistory 12 ไฟล์บันทึกที่เกิน 12 เดือนจะถูกลบออกโดยอัตโนมัติ
ในระยะสั้นการลงชื่อเข้าใช้ดีกว่า log4j ให้เราสร้างแอปพลิเคชันทั้งหมดของเราในการกลับเข้าสู่ระบบ!
3. แนะนำ logback ลงในโครงการ
เพิ่มการพึ่งพาแพ็คเกจสไตล์ Maven:
<การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Logging </artifactid> </การพึ่งพาการพึ่งพา> <predency> <roupid> net.logstash.logback </GroupId> <RoupID> net.logstash.log4j </groupId> <ratifactId> jsonEvenvent-Layout </artifactId> <cersion> 1.7 </เวอร์ชัน> </deperency>
4. เพิ่ม logback.xml
เพิ่มไฟล์ logback.xml ไปยังไดเรกทอรี SRC/Main/Resources และระบบจะโหลดการกำหนดค่า logback.xml โดยอัตโนมัติ
logback.xml:
<? xml version = "1.0" encoding = "utf-8"?> <การกำหนดค่า scan = "true" scanperiod = "60 วินาที" debug = "false"> <รวมทรัพยากร = "org/spramframework/boot/logging/logback/base.xml"/> <บริบท> value = "e: //test//logback.log"/>-> <property name = "log.path" value = "/users/chang/desktop/chlogs/logback.log"/> <appender name = "stash"> <testion> 192.168.220.83:9601 name = "console"> <!-<filter> <slevel> ข้อผิดพลาด </ระดับ> </ss.sss>-> <encoder> <pattern> %d {hh: mm: ss.sss} %contextName [ %เธรด] %-5Level %Logger {36}- %msg %n </pattern> <file> $ {log.path} </file> <rollingPolicy> <pilenamePattern> logback. %d {yyyy-mm-dd} .log </filenamepattern> </rollingpolicy> <coder> <coder> %msg %n </pattern> </coder> </appender> <root level = "info"> <appender-ref ref = "Stash"/> <Appender-ref ref = "คอนโซล"/> <Appender-ref ref = "ไฟล์"/> </root> <! คลาส <logger name = "com.dudu.controller.learNcontroller" ระดับ = "warn" เพิ่มเติม = "false"> <appender-ref ref = "คอนโซล"/> </ogger>-> </การกำหนดค่า>5. ปัญหาเวอร์ชัน LogStash-Logback-Encoder
ใน Spring-Boot หากคุณใช้ LogStash-Logback-Encoder คุณอาจต้องบอก Maven หมายเลขเวอร์ชันเฉพาะเพื่อหลีกเลี่ยงความขัดแย้งในการพึ่งพาแพ็คเกจ ตัวอย่างเช่นคุณสามารถตั้งค่าการพึ่งพาของ logback-core, logback-classic และ logback-access ดังต่อไปนี้:
<properties> <ch.qos.logback.version> 1.2.3 </ch.qos.logback.version> </premerties> <perdencyManagement> <perndencies> <การพึ่งพา> <roupid> ch.qos.logback </groupid> </permentency> <predency> <roupId> ch.qos.logback </groupId> <ratifactId> logback-classic </artifactid> <cersion> $ {ch.qos.logback.version} </Sidefactid> <cersion> $ {ch.qos.logback.version} </version> </derentency> </dependency> </dercendencyManagement>6. การก่อสร้าง Logstash Service
อ้างถึง:
1. logstash-logback-encoder
สรุป
ด้านบนเป็นวิธีการใช้ logback, logstash และ elk เพื่อบันทึกไฟล์บันทึกในสปริงบูตแนะนำให้คุณ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!