Ghi nhật ký Java

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về Java Logging và các thành phần khác nhau của nó với sự trợ giúp của các ví dụ.

Java cho phép chúng ta tạo và nắm bắt các thông báo và tệp nhật ký thông qua quá trình ghi nhật ký.

Trong Java, việc ghi nhật ký yêu cầu các khuôn khổ và API. Java có một khung ghi nhật ký được tích hợp sẵn trong java.util.logginggói.

Chúng tôi cũng có thể sử dụng các khuôn khổ của bên thứ ba như Log4j, Logback và nhiều khung khác cho mục đích ghi nhật ký.

Các thành phần ghi nhật ký Java

Hình bên dưới đại diện cho các thành phần cốt lõi và luồng kiểm soát của API ghi nhật ký Java ( java.util.logging).

Ghi nhật ký Java

1. Người ghi nhật ký

Các Loggerlớp học cung cấp phương pháp để khai thác gỗ. Chúng ta có thể khởi tạo các đối tượng từ Loggerlớp và gọi các phương thức của nó cho mục đích ghi nhật ký.

Hãy lấy một ví dụ.

 Logger logger = Logger.getLogger("newLoggerName"); 

Các getLogger()phương pháp của Loggerlớp được sử dụng để tìm hoặc tạo mới Logger. Đối số chuỗi xác định tên của trình ghi nhật ký.

Ở đây, điều này tạo ra một Loggerđối tượng mới hoặc trả về một đối tượng hiện có Loggercó cùng tên.

Đó là một quy ước để xác định một Loggersau lớp hiện tại đang sử dụng class.getName().

 Logger logger = Logger.getLogger(MyClass.class.getName()); 

Lưu ý: Phương thức này sẽ ném NullPointerExceptionnếu tên được truyền là null.

Mỗi loại Loggercó một mức xác định tầm quan trọng của thông báo nhật ký. Có 7 cấp độ nhật ký cơ bản:

Cấp độ nhật ký (theo thứ tự giảm dần) Sử dụng
DỮ DỘI thất bại nghiêm trọng
CẢNH BÁO thông báo cảnh báo, một vấn đề tiềm ẩn
THÔNG TIN thông tin thời gian chạy chung
CẤU HÌNH thông tin cấu hình
KHỎE thông tin chung về nhà phát triển (theo dõi thông báo)
CUỐI CÙNG thông tin chi tiết về nhà phát triển (thông báo theo dõi)
CUỐI CÙNG thông tin nhà phát triển rất chi tiết (theo dõi thông báo)
TẮT tắt ghi nhật ký cho tất cả các cấp (không ghi gì)
TẤT CẢ bật ghi nhật ký cho tất cả các cấp (nắm bắt mọi thứ)

Mỗi cấp nhật ký có một giá trị nguyên xác định mức độ nghiêm trọng của chúng ngoại trừ hai cấp nhật ký đặc biệt OFFALL.

Ghi nhật ký tin nhắn

Theo mặc định, ba cấp nhật ký hàng đầu luôn được ghi lại. Để đặt một cấp độ khác, chúng ta có thể sử dụng mã sau:

 logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE); 

Trong ví dụ này, chỉ cấp FINEvà các cấp trên nó được thiết lập để được ghi lại. Tất cả các thông báo nhật ký khác bị loại bỏ.

Bây giờ để ghi một tin nhắn, chúng tôi sử dụng log()phương pháp.

 logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message"); 

Có các phương pháp viết tắt để ghi nhật ký ở các cấp độ mong muốn.

 logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message"); 

Tất cả các yêu cầu nhật ký đã vượt qua mức nhật ký đã đặt sau đó sẽ được chuyển tiếp đến LogRecord .

Lưu ý: Nếu cấp độ của người ghi nhật ký được đặt thành null, cấp độ của nó sẽ được kế thừa từ cấp độ gốc của nó và cứ thế tiếp tục lên cây.

2. Bộ lọc

Một bộ lọc (nếu có) xác định liệu LogRecord có nên được chuyển tiếp hay không. Như tên cho thấy, nó lọc các thông báo nhật ký theo các tiêu chí cụ thể.

Một LogRecord chỉ truyền từ các logger để xử lý đăng nhập và từ xử lý đăng nhập vào hệ thống bên ngoài nếu nó vượt qua các tiêu chí nhất định.

 // set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter(); 

3. Người xử lý (Người phụ)

Trình xử lý nhật ký hoặc trình phụ lục nhận LogRecord và xuất nó sang các mục tiêu khác nhau.

Java SE cung cấp 5 trình xử lý tích hợp:

Người xử lý Sử dụng
StreamHandler viết cho một OutputStream
ConsoleHandler writes to console
FileHandler writes to file
SocketHandler writes to remote TCP ports
MemoryHandler writes to memory

A handler can pass the LogRecord to a filter to again determine whether it can be forwarded to external systems or not.

To add a new handler, we use the following code:

 logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); 

To remove a handler, we use the following code:

 logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler); 

A logger can have multiple handlers. To get all the handlers, we use the following code:

 Handler() handlers = logger.getHandlers(); 

4. Formatters

A handler can also use a Formatter to format the LogRecord object into a string before exporting it to external systems.

Java SE has two built-in Formatters:

Formatters Use
SimpleFormatter formats LogRecord to string
XMLFormatter formats LogRecord to XML form

We can use the following code to format a handler:

 // formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter()); 

LogManager

Các LogManager đối tượng theo dõi những thông tin đăng nhập toàn cầu. Nó đọc và duy trì cấu hình ghi nhật ký và các thể hiện của bộ ghi nhật ký.

Trình quản lý nhật ký là một singleton, có nghĩa là chỉ một phiên bản của nó được khởi tạo.

Để có được phiên bản trình quản lý nhật ký, chúng tôi sử dụng mã sau:

 LogManager manager = new LogManager(); 

Ưu điểm của ghi nhật ký

Dưới đây là một số ưu điểm của việc đăng nhập bằng Java.

  • giúp theo dõi dòng chảy của chương trình
  • giúp nắm bắt bất kỳ lỗi nào có thể xảy ra
  • cung cấp hỗ trợ chẩn đoán và gỡ lỗi vấn đề

thú vị bài viết...