- vừa được xem lúc

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

0 0 9

Người đăng: NGUYỄN ANH TUẤN

Theo Viblo Asia

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à consolefile. 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 arrayghi 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 appenderSTDOUT đại diện cho appenderconsole appender. Trong thuộc tính class, chúng ta chỉ định lớp của console appender. File Appender nó sẽ ghi log vào tệp. Nếu appenderfile 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.😉

Ref

Bình luận

Bài viết tương tự

- vừa được xem lúc

Private, Public, Protected và Default trong Java

1. Private, Public, Protected và Default .

0 0 17

- vừa được xem lúc

Java và những điều chưa biết đừng tự phụ :D

JVM vs JRE vs JDK. . Java Virtual Machine (JVM). JVM là máy ảo có thể thực thi các Java bytecode.

0 0 16

- vừa được xem lúc

Tản mạn về Thread trong Java

Thread vs Process. . . .

0 0 47

- vừa được xem lúc

Sự khác nhau giữa biến tham chiếu kiểu List và ArrayList trong Java là gì?

1. Đặt vấn đề.

0 0 38

- vừa được xem lúc

[Java 8] Behavior Parameterization in Java.

Chào các bạn, hôm nay mình sẽ giới thiệu mọi người về Behavior Parameterization là gì và được implement trong java như thế nào thông qua ví dụ vô cùng đơn giản. Để dễ hiểu mình sẽ dùng cú pháp java 8

0 0 21

- vừa được xem lúc

[Java Core] - Tất tần tật về Varargs trong Java!

Không biết anh em đã nghe đến cái tên varargs (variable arguments) hay sử dụng varargs trong Java chưa? Mình nghĩ cũng chưa nhiều anh em để ý đến nó đâu nhỉ. Bài viết gốc được chia sẻ tại: https://lap

0 0 22