0Pricing
Java Academy · บทเรียน

การกำหนดค่า 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดจึงควรใช้การบันทึกแบบมีโครงสร้าง
  2. ส่วนหน้าของ SLF4J และตัวบันทึก
  3. การบันทึกแบบกำหนดพารามิเตอร์
  4. การกำหนดค่า Logback
← กลับไปที่ Java Academy