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ý tích hợp 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.v. cho các 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 Loggerlớp sau khi sử dụng lớp hiện tại 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 vào null.

Mỗi thứ đều 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:

Log Level (in descending order)Use
SEVEREserious failure
WARNINGwarning message, a potential problem
INFOgeneral runtime information
CONFIGconfiguration information
FINEgeneral developer information (tracing messages)
FINERdetailed developer information (tracing messages)
FINESThighly detailed developer information(tracing messages)
OFFturn off logging for all levels (capture nothing)
ALLturn on logging for all levels (capture everything)

Mỗi cấp độ nhật ký có một giá trị số 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 OFFvà ALL.

Ghi nhật ký tin nhắn

Theo mặc định, ba cấp độ nhật ký hàng đầu luôn được ghi nhật ký. Để đặ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 nhật ký 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 trê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:

HandlersUse
StreamHandlerwrites to an OutputStream
ConsoleHandlerwrites to console
FileHandlerwrites to file
SocketHandlerwrites to remote TCP ports
MemoryHandlerwrites to memory

Một trình xử lý có thể chuyển LogRecord tới một bộ lọc để xác định lại xem nó có thể được chuyển tiếp đến các hệ thống bên ngoài hay không.

Để thêm một trình xử lý mới, chúng tôi sử dụng mã sau:

logger.addHandler(handler);

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

Để xóa trình xử lý, chúng tôi sử dụng mã sau:

logger.removeHandler(handler);

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

Một trình ghi nhật ký có thể có nhiều trình xử lý. Để có được tất cả các trình xử lý, chúng tôi sử dụng mã sau:

Handler[] handlers = logger.getHandlers();

4. Định dạng

Trình xử lý cũng có thể sử dụng Định dạng để định dạng đối tượng LogRecord thành một chuỗi trước khi xuất nó ra các hệ thống bên ngoài.

Java SE có hai Bộ định dạng tích hợp :

FormattersUse
SimpleFormatterformats LogRecord to string
XMLFormatterformats LogRecord to XML form

Chúng tôi có thể sử dụng mã sau để định dạng trình xử lý:

// 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.

  • helps in monitoring the flow of the program
  • helps in capturing any errors that may occur
  • provides support for problem diagnosis and debugging








Gõ tìm kiếm nhanh...