Blog#18: Trên tay nhanh SLF4j logging 😊 (Series: Java Handbook - Phần 3)

image.png

Mình là TUẤN hiện đang là một Full-stack Developer tại Tokyo 😉. Nếu bạn thấy Blog này hay xin hãy cho mình một like và đăng ký để ủng hộ mình nhé 😊.

Hôm nay mình sẽ lướt qua nhanh chóng một số thứ đơn giản nhất về SLF4j.

Ghi log là một phần rất quan trọng trong lập trình. Nó sẽ giúp một lập trình viên biết được vị trí ứng dụng bị lỗi. Bài viết này sẽ giúp bạn ghi log bằng SLF4j.

Định nghĩa

Logging Facade đơn giản cho Java (SLF4J) đóng vai trò như một Facade đơn giản hoặc Abtraction cho các framework logging khác nhau, chẳng hạn như java.util.logging, logback và log4j. SLF4J cho phép người dùng framework logging những gì mình muốn tại thời điểm triển khai.

(Về các Pattern như Facade hay Abtraction, Factory mình cũng đã có bài viết cụ thể về vấn đề này bạn có thể tham khảo để biết thêm một số Design Pattern cơ bản mà dev nào cũng nên biết)

Cách sử dụng SLF4j.

Yêu cầu

Để sử dụng SLF4j, chúng ta cần thêm ba phụ thuộc vào tệp pom.xml.

  • slf4j-api.jar
  • logback-core.jar
  • logback-classic.jar

Làm thế nào để Logging?

Chúng ta cần tạo một instance của Logger được truy xuất bằng cách gọi hàm getLogger tĩnh từ lớp LoggerFactory.

Cú pháp:

Logger logger = LoggerFactory.getLogger ("className");

ClassName là tên của lớp mà việc logging được thêm vào. ClassName này trở thành tên của trình logging.

Bây giờ sử dụng instance này, chúng ta có thể ghi log.

Ví dụ:

logger.debug ("Hello world.");

Trong ví dụ trên, hàm debug được sử dụng để ghi lại thông tin. Có nhiều hàm khác nhau có thể được sử dụng để ghi lại thông tin. Mọi hàm đều có ý nghĩa và có thể được hiển thị theo các level khác nhau được đặt trong tệp logback.xml.

Các hàm logging khác:

  • trace()
  • debug()
  • info()
  • warn()
  • error()

DONE 

Kiến trúc của Logback

Logback được chia thành ba mô-đun thường được gọi là logback-core, logback-classic và logback-access. Logback được xây dựng dựa trên ba lớp chính tức là Logger, Appender và Layout. Lớp Logger là một phần của mô-đun logback-classic. Appender và Layout là một phần của logback-core.

Cấu hình trong logback

Như đã đề cập trong tài liệu chính thức, khi logback tự cấu hình và nó sẽ thực hiện theo các bước dưới đây.

  1. Logback cố gắng tìm một tệp có tên logback-test.xml trong classpath.
  2. Nếu không tìm thấy tệp nào như vậy, logback sẽ cố gắng tìm tệp có tên logback.groovy trong classpath.
  3. Nếu không tìm thấy tệp nào như vậy, nó sẽ test tệp logback.xml trong classpath.
  4. Nếu không tìm thấy tệp nào như vậy, service-provider (được giới thiệu trong JDK 1.6) sẽ được sử dụng để giải quyết việc triển khai giao diện com.qos.logback.classic.spi.Configurator bằng cách tra cứu tệp META-INF\services\ch.qos.logback.classic.spi.Configurator trong classpath. Nội dung của nó nên chỉ định tên lớp đủ điều kiện của việc triển khai Configurator như mong muốn.
  5. Nếu không có cách nào ở trên thành công, logback sẽ tự động cấu hình bằng cách sử dụng [BasicConfigurator](https://logback.qos.ch/xref/ch/qos/logback/classic/BasicConfigurator.html) nó sẽ ghi log và chuyển hướng đến console (Mặc định là console).

Appender Tag

Appender là một component có nhiệm vụ ghi các sự kiện logging. Trong thẻ appender, chúng ta có thẻ encoder, trong đó chúng ta chỉ định định dạng của thông báo logging trong thẻ mẫu. Có hai loại appender là console và file. Appender có hai tên thuộc tính và lớp xác định đó là trình file appender hay console appender. Chúng ta sẽ sử dụng thẻ encoder trong khi xác định các phần phụ như được cung cấp bên dưới. Về cơ bản, nó được sử dụng để chuyển đổi event ghi log thành byte array và ghi log trên outputStream.

Console Appender

Nhìn tên thôi là biết nó sẽ ghi log lên console.

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
    </encoder>
  </appender>

  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

Thuộc tính name của appender là STDOUT đại diện cho appender là console appender. Trong thuộc tính class, chúng ta chỉ định lớp của console appenderFile Appender nó sẽ ghi log vào tệp. Nếu appender là file appender, thì nó có thẻ file có đường dẫn đến nơi lưu trữ tệp logging.

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>testFile.log</file>
        <!-- encoders are assigned the type
            ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
        
    <root level="DEBUG">
        <appender-ref ref="FILE" />
    </root>
</configuration>

Tham khảo Tài liệu

chính thức của SL4J.

Roudup

Như mọi khi, mình hy vọng bạn thích bài viết này và biết thêm được điều gì đó mới.

Cảm ơn và hẹn gặp lại các bạn trong những bài viết tiếp theo! 😍

Nếu bạn thấy thích blog của mình thì nhấn theo dõi để ủng hộ mình nhé. Thank you.😉

NGUYỄN ANH TUẤN

Xin chào, mình là Tuấn, một kỹ sư phần mềm đang làm việc tại Tokyo. Đây là blog cá nhân nơi mình chia sẻ kiến thức và kinh nghiệm trong quá trình phát triển bản thân. Hy vọng blog sẽ là nguồn cảm hứng và động lực cho các bạn. Hãy cùng mình học hỏi và trưởng thành mỗi ngày nhé!

2 Nhận xét

  1. Nặc danh27/1/23 10:44

    Xin chào bạn, b cho mình hỏi logback có thể tích hợp trên c# ko ạ ?

    Trả lờiXóa
    Trả lời
    1. Xin lỗi nhé, vì mình không có kinh nghiệm với C# nên cũng không rõ là C# có plugin SLF4j này không nữa. Thông cảm nhé.

      Xóa
Mới hơn Cũ hơn