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.logging
gó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 Logger
lớ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ừ Logger
lớ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 Logger
lớ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ó Logger
có cùng tên.
Đó là một quy ước để xác định một Logger
lớ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 NullPointerException
nếu tên được truyền vào null
.
Mỗi thứ đều Logger
có 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 |
---|---|
SEVERE | serious failure |
WARNING | warning message, a potential problem |
INFO | general runtime information |
CONFIG | configuration information |
FINE | general developer information (tracing messages) |
FINER | detailed developer information (tracing messages) |
FINEST | highly detailed developer information(tracing messages) |
OFF | turn off logging for all levels (capture nothing) |
ALL | turn 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 OFF
và 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 FINE
và 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:
Handlers | Use |
---|---|
StreamHandler | writes to an OutputStream |
ConsoleHandler | writes to console |
FileHandler | writes to file |
SocketHandler | writes to remote TCP ports |
MemoryHandler | writes 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 :
Formatters | Use |
---|---|
SimpleFormatter | formats LogRecord to string |
XMLFormatter | formats 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