ในแอปพลิเคชัน Java บันทึกโดยทั่วไปจะแบ่งออกเป็น 5 ระดับดังต่อไปนี้:
Spring Boot ใช้การบันทึกคอมมอนส์ของ Apache เป็นกรอบการบันทึกภายใน มันเป็นเพียงอินเทอร์เฟซบันทึก ในแอปพลิเคชันจริงจำเป็นต้องระบุการใช้งานบันทึกที่เกี่ยวข้องสำหรับอินเทอร์เฟซนี้
การใช้งานบันทึกเริ่มต้นของ SpringBT คือ Java Util Logging ซึ่งเป็นแพ็คเกจบันทึกที่สร้างขึ้นใน JDK นอกจากนี้ SpringBT ยังรองรับการใช้งานบันทึกยอดนิยมเช่น log4j และ logback
การใช้งานบันทึก ข้างต้นเรียกรวมกันว่า เฟรมเวิร์กบันทึก
มาฝึกฝนไว้ด้านล่าง!
ใช้ปลั๊กอินการบันทึกสปริงบูต
ก่อนอื่นเพิ่มการกำหนดค่าลงในไฟล์ Application.properties:
logging.level.root = ข้อมูล
รหัสคอนโทรลเลอร์มีดังนี้:
แพ็คเกจ com.hansonwang99.Controller; นำเข้า com.hansonwang99.k8sresctrlapplication; นำเข้า org.slf4j.logger นำเข้า org.slf4j.loggerfactory นำเข้า org.springframework.web.bind.annotation.getmapping; org.springframework.web.bind.annotation.requestmapping; นำเข้า org.springframework.web.bind.annotation.restcontroller;@restcontroller@requestmapping ("/testlogging") คลาสสาธารณะ loggerFactory.getLogger (k8sresctrlapplication.class); @getMapping ("/hello") สตริงสาธารณะสวัสดี () {logger.info ("ทดสอบการบันทึก ... "); กลับ "สวัสดี"; -การรันผลลัพธ์
เนื่องจากระดับบันทึกถูกตั้งค่าเป็นข้อมูลข้อมูลบันทึกที่มีข้อมูลและด้านบนจะถูกพิมพ์ออกมา
ดังที่เห็นได้ที่นี่บันทึกข้อมูลส่วนใหญ่มาจากกรอบ Springbt เอง หากเราต้องการบล็อกพวกเขาเราสามารถตั้งค่าระดับบันทึกเป็นข้อผิดพลาดก่อนเพื่อให้ข้อมูลข้อมูลของเฟรมเวิร์กเองจะไม่ถูกพิมพ์ จากนั้นตั้งค่าแพ็คเกจเฉพาะในแอปพลิเคชันเป็นบันทึกระดับการดีบักเพื่อให้คุณสามารถเห็นบันทึกระดับการดีบักในแพ็คเกจที่คุณกังวลเท่านั้น
ควบคุมระดับบันทึกของแพ็คเกจเฉพาะ
เปลี่ยนการกำหนดค่าใน application.yml
การบันทึก: ระดับ: รูท: ข้อผิดพลาด com.hansonwang99. controller: debug
เห็นได้ชัดว่าระดับบันทึกรูทถูกตั้งค่าเป็นข้อผิดพลาดจากนั้นระดับบันทึกของ com.hansonwang99.controller conformcontroller แพ็คเกจถูกตั้งค่าเป็น debug ซึ่งหมายถึง: ห้ามการตั้งค่าทั้งหมดก่อนแล้วจึงอนุญาตให้ตั้งค่าแต่ละครั้ง
รหัสคอนโทรลเลอร์
แพ็คเกจ com.hansonwang99.controller; นำเข้า org.slf4j.logger; นำเข้า org.slf4j.loggerfactory; นำเข้า org.springframework.web.bind.annotation.getMapping; org.springframework.web.bind.annotation.restcontroller;@restcontroller@requestmapping ("/testlogging") การบันทึกคลาสสาธารณะ LoggingTestController {ส่วนตัว logger logger = loggerFactory.getLogger (this.getClass ()); @getMapping ("/hello") สตริงสาธารณะสวัสดี () {logger.info ("ทดสอบการบันทึก ... "); กลับ "สวัสดี"; -การรันผลลัพธ์
จะเห็นได้ว่าเฟรมเวิร์กนั้นมีบันทึกระดับข้อมูลทั้งหมดที่ซ่อนอยู่และบันทึกในแพ็คเกจที่ระบุจะถูกพิมพ์สำเร็จตามระดับ
บันทึกเอาต์พุตไปยังไฟล์
การบันทึก: ระดับ: รูท: ข้อผิดพลาด com.hansonwang99.Controller: ไฟล์ดีบั๊ก: $ {user.home} /logs/hello.logการรันผลลัพธ์
การใช้การบันทึกการบูตสปริงเราพบว่าแม้ว่าบันทึกจะถูกส่งออกไปยังไฟล์ แต่สำเนาจะยังคงพิมพ์ในคอนโซล เราพบว่าการใช้ org.slf4j.Logger ไม่สามารถแก้ปัญหานี้ได้
Framework Log4J Log
เพิ่มการพึ่งพาใน pom.xml
<การพึ่งพา> <roupId> org.springframework.boot </groupid> <ratifactid> Spring-Boot-Starter-Web </artifactid> <exclusions> oot-starter-logging </artifactid> </excusision> </การยกเว้น> </การพึ่งพาอาศัย> <การพึ่งพา> <GroupId> org.springframework.boot </groupId>
เพิ่มไฟล์ log4j2.xml ในไดเรกทอรีทรัพยากรเนื้อหามีดังนี้:
<? xml version = "1.0" การเข้ารหัส = "utf -8"?> <การกำหนดค่า> <ผู้คัดค้าน> <file name = "file" filename = "$ {sys: user.home} /logs/hello2.log" </appenders> <loggers> <root level = "ข้อผิดพลาด"> <appender-ref ref = "ไฟล์"/> </root> <logger name = "com.hansonwang99.Controller" ระดับ = "debug"/> </loggers>รหัสอื่นยังคงเหมือนเดิม
การเรียกใช้โปรแกรมพบว่าคอนโซลไม่มีเอาต์พุตบันทึกและมีเนื้อหาในไฟล์ hello2.log ซึ่งสอดคล้องกับความคาดหวังของเรา:
และรูปแบบการบันทึกตรงกับคำจำกัดความใน pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n" รูปแบบ
log4j ต้องฝึกฝนต่อไป
การกำหนดค่า pom.xml:
<การพึ่งพา> <roupId> org.springframework.boot </groupid> <ratifactid> Spring-Boot-Starter-Web </artifactid> <exclusions> oot-starter-logging </artifactid> </excusision> </การยกเว้น> </การพึ่งพาอาศัย> <การพึ่งพา> <GroupId> org.springframework.boot </groupId>
การกำหนดค่า log4j2.xml
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <สถานะการกำหนดค่า = "warn"> <properties> <property name = "app_name"> springboot-web </คุณสมบัติ> <property name = "log_path"> logs/$ {app_name} pattern = "[%d] [%t] [%p] [%l]%m%n"/> </console> <rollingfile name = "RollingFileInfo" filename = "$ {log_path} /info.log" filePattern = "$ {log_path}/$$ {วันที่: yyyy-mm}/info-%d {yyyy-mm-dd}-%i.log.gz"> <filters> <thresholdFilter = "info"/> <thresholdFilter ระดับ = "Warn" pattern = "[%d] [%t] [%p] [%c:%l]%m%n" /> <policies> <!-ไฟล์เก็บถาวรทุกวัน-> <timebasedtriggeringpolicy Interval = "1" modulate = "true" /> <!-จำกัด ขนาดไฟล์เดียว- <defaultrolloverstrategy pressingLevel = "0" max = "10"/> </rollingfile> <rollingfile name = "RollingFileWarn" filename = "$ {log_path} /warn.log" filePattern = "$ {log_path}/$$ {วันที่: yyyy-mm}/warn-%d {yyyy-mm-dd}-%i.log.gz"> <filters> <thresholdFilter = "เตือน" pattern = "[%d] [%t] [%p] [%c:%l]%m%n" /> <policies> <!-ไฟล์เก็บถาวรทุกวัน-> <timebasedtriggeringpolicy Interval = "1" modulate = "true" /> <!-จำกัด ขนาดไฟล์เดียว- <defaultrolloverstrategy pressingLevel = "0" max = "10"/> </rollingfile> <rollingfile name = "RollingFileERror" filename = "$ {log_path}/error.log" filePattern = "$ {log_path} /$$ {วันที่: yyyy-mm} /ข้อผิดพลาด-%d {yyyy-mm-dd}-%i.log.gz"> <thresholdFilter ระดับ = "ข้อผิดพลาด" /> <TimebasedTriggeringPolicy Interval = "1" modulate = "true"/> <!-จำกัด ขนาดไฟล์เดียว-> <sizebasedtriggeringpolicy size = "2 mb"/> </policies> <!-จำกัด จำนวนไฟล์ต่อวัน-> level = "info"> <appender-ref ref = "console" /> <appender-ref ref = "rollingfileinfo" /> <appender-ref ref = "RollingFileWarn" /> <appender-ref ref = "RollingFileERror" /> < /root>รหัสคอนโทรลเลอร์:
แพ็คเกจ com.hansonwang99.controller; นำเข้า org.apache.logging.log4j.logmanager; นำเข้า org.apache.logging.log4j.logger; นำเข้า org.springframework.web.bind.annotation.getmapping; org.springframework.web.bind.annotation.restcontroller;@restcontroller@requestmapping ("/testlogging") การบันทึกชั้นเรียนสาธารณะ @getMapping ("/hello") สตริงสาธารณะสวัสดี () {สำหรับ (int i = 0; i <10_0000; i ++) {logger.info ("ข้อมูลการดำเนินการดัชนีข้อมูล"); logger.warn ("เตือนวิธีการดัชนีดำเนินการ"); logger.error ("ข้อผิดพลาดดำเนินการดัชนีวิธีการ"); } return "แอปพลิเคชัน Springboot แรกของฉัน"; -การรันผลลัพธ์
บันทึกจะถูกเก็บไว้ในไฟล์ต่าง ๆ ตามระดับที่แตกต่างกัน เมื่อขนาดไฟล์บันทึกเกิน 2M ไฟล์หลายไฟล์จะถูกบีบอัดและเก็บไว้ ขอแนะนำให้ปรับขนาดไฟล์บันทึกของสภาพแวดล้อมการผลิตเป็น 20-50MB
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น