การกำหนดค่า Logback
ตัวเพิ่มข้อมูล รูปแบบ และระดับ
การกำหนดค่า Logback เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
Logback คืออะไร
Logback เป็นระบบเบื้องหลัง SLF4J ที่ได้รับความนิยม และเขียนโดยผู้เขียนคนเดียวกับ Log4j ระบบนี้ดำเนินการบันทึกล็อกจริงตามที่ SLF4J เรียกใช้
คุณกำหนดค่าระบบนี้ด้วยไฟล์ชื่อ logback.xml ที่อยู่ในเส้นทางคลาส โดยปกติจะอยู่ภายใต้ src/main/resources
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("Logback reads logback.xml at startup");
}
}องค์ประกอบหลักสามอย่าง
การกำหนดค่า Logback มีแนวคิดหลักสามอย่าง:
- ตัวบันทึก: แหล่งที่มาที่มีชื่อของเหตุการณ์ล็อก พร้อมระดับ
- ตัวส่งออก: ปลายทาง เช่น คอนโซลหรือไฟล์
- ตัวเข้ารหัส/รูปแบบ: จัดรูปแบบเหตุการณ์เป็นข้อความ
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("logger -> appender -> encoder -> output");
}
}ตัวส่งออกไปยังคอนโซล
การกำหนดค่าที่ง่ายที่สุดคือส่งทุกอย่างไปยังคอนโซล รูปแบบของตัวเข้ารหัสจะควบคุมรูปแบบของแต่ละบรรทัด
XML นี้อยู่ใน logback.xml ไม่ใช่ในโค้ด Java ของคุณ
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>ทำความเข้าใจรูปแบบ
คำสำหรับแปลงรูปแบบจะขึ้นต้นด้วย %:
%dคือเวลาประทับ และ%levelคือระดับ%loggerคือชื่อตัวบันทึก และ%threadคือเธรด%msgคือข้อความของคุณ และ%nคือการขึ้นบรรทัดใหม่
%-5level จะเติมช่องว่างด้านซ้ายให้ระดับมีความกว้าง 5 ตัวอักษร
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
// Output rendered by pattern: time LEVEL logger - message
log.info("hello");
}
}ตัวบันทึกหลักและระดับ
องค์ประกอบ <root> จะตั้งค่าระดับเริ่มต้นสำหรับแอปทั้งหมด รวมถึงตัวส่งออกที่แอปจะเขียนข้อมูลไป
การตั้งค่า level="info" หมายความว่า INFO, WARN และ ERROR จะถูกส่งออก ส่วน DEBUG และ TRACE จะถูกระงับ
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<root level="warn">
<appender-ref ref="STDOUT" />
</root>
</configuration>ระดับแยกตามแพ็กเกจ
เพิ่มองค์ประกอบ <logger> เพื่อกำหนดระดับทับสำหรับแพ็กเกจ วิธีนี้ทำให้คุณเปิดใช้ DEBUG กับโค้ดของตนเองได้ ขณะเดียวกันก็ปิดเสียงไลบรารีไว้
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<logger name="com.example.app" level="debug" />
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>ตัวส่งออกไปยังไฟล์แบบหมุนเวียน
สำหรับระบบจริง โดยปกติคุณจะเขียนลงไฟล์ที่ เปลี่ยนไฟล์หมุนเวียน รายวันหรือตามขนาด เพื่อไม่ให้ล็อกเติบโตโดยไม่มีขีดจำกัด
RollingFileAppender ที่ใช้นโยบายตามเวลาจะสร้างไฟล์วันละหนึ่งไฟล์และเก็บประวัติไว้ตามจำนวนสูงสุดที่กำหนด
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d %-5level [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>ตัวส่งออกหลายตัวพร้อมกัน
ตัวบันทึกหลักสามารถอ้างอิงตัวส่งออกหลายตัวได้ ดังนั้นล็อกจึงถูกส่งไปยังทั้งคอนโซลและไฟล์พร้อมกัน
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %msg%n</pattern></encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app.log</file>
<encoder><pattern>%d %-5level %msg%n</pattern></encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>การพิมพ์ MDC
หากต้องการใส่บริบทจาก MDC เช่น รหัสคำขอในทุกบรรทัด ให้เพิ่ม %X{key} ลงในรูปแบบ
จากนั้นค่าใด ๆ ที่คุณใส่ไว้ใน MDC จะแสดงโดยอัตโนมัติ
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
MDC.put("requestId", "req-1234");
// Pattern: %X{requestId} %-5level %msg%n
log.info("handled");
MDC.clear();
}
}การสืบทอดการส่งออก
ตามค่าเริ่มต้น เหตุการณ์ของตัวบันทึกจะถูกส่งไปยังตัวส่งออกของรายการบรรพบุรุษด้วย คุณสมบัตินี้เรียกว่า การส่งออกแบบเพิ่มเติม
หากตัวบันทึกของแพ็กเกจมีตัวส่งออกของตนเอง และคุณไม่ต้องการให้ผลลัพธ์ซ้ำกัน ให้ตั้งค่า additivity="false" ให้กับตัวบันทึกนั้น
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<logger name="com.example.audit" level="info" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="warn">
<appender-ref ref="STDOUT" />
</root>
</configuration>การโหลดใหม่อัตโนมัติและตัวแปร
Logback สามารถโหลดการกำหนดค่าใหม่เป็นระยะด้วย <configuration scan="true"> ซึ่งมีประโยชน์สำหรับการเปลี่ยนระดับโดยไม่ต้องเริ่มระบบใหม่
คุณยังสามารถอ่านคุณสมบัติ เช่น ไดเรกทอรีล็อก ด้วยตัวยึดตำแหน่ง ${LOG_DIR} ได้
<configuration scan="true" scanPeriod="30 seconds">
<property name="LOG_DIR" value="logs" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${LOG_DIR}/app.log</file>
<encoder><pattern>%d %-5level %msg%n</pattern></encoder>
</appender>
<root level="info"><appender-ref ref="FILE" /></root>
</configuration>ตรวจสอบความเข้าใจ
ทดสอบความรู้เกี่ยวกับการกำหนดค่า Logback
ทบทวน
คุณได้เรียนรู้การกำหนดค่า Logback:
- การกำหนดค่าอยู่ใน
logback.xmlพร้อมตัวบันทึก ตัวส่งออก และตัวเข้ารหัส - รูปแบบจะจัดรูปแบบบรรทัดด้วย
%d,%level,%msg,%X{} - RollingFileAppender จะหมุนเวียนล็อก คุณสามารถตั้งระดับแยกตามแพ็กเกจและการส่งออกแบบเพิ่มเติมได้
- เปิดใช้
scanเพื่อกำหนดค่าใหม่ขณะระบบทำงาน
คุณเรียนจบหลักสูตรการบันทึกล็อกแล้ว
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("Logback configuration course complete");
}
}คำถามที่พบบ่อย
บทเรียน “การกำหนดค่า Logback” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนดค่า Logback” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดค่า Logback”
ตัวเพิ่มข้อมูล รูปแบบ และระดับ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การกำหนดค่า Logback” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงควรใช้การบันทึกแบบมีโครงสร้าง
- ส่วนหน้าของ SLF4J และตัวบันทึก
- การบันทึกแบบกำหนดพารามิเตอร์
- การกำหนดค่า Logback