English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In this tutorial, we will learn Java logging and its various components through examples.
Java allows us to create and capture log messages and files through the logging process.
In Java, logging requires frameworks and APIs. Java has an integrated logging framework in the java.util.logging package.
We can also use third-party frameworks (such as Log4j, Logback, etc.) are used for logging.
The following diagram shows the core components and specified process of the Java Logging API (java.util.logging).
The Logger class provides logging methods. We can instantiate an object from the Logger class and call its methods to log.
Let's take an example.
Logger logger = Logger.getLogger("newLoggerName");
The getLogger() method of the Logger class is used to find or create a new Logger. The string parameter defines the name of the logger.
Here, this will create a new Logger object or return a Logger object with the same name.
By convention, a Logger is defined after the class.getName() in the current class.
Logger logger = Logger.getLogger(MyClass.class.getName());
注意:If the passed name is null, this method will throw a NullPointerException.
Each Logger has a level that determines the importance of log messages. There is7Basic log levels:
Log levels (in descending order) | Using |
---|---|
SEVERE | Severe failures |
WARNING | Warning messages, potential issues |
INFO | Routine runtime information |
CONFIG | Configuration information |
FINE | Normal developer information (trace messages) |
FINER | Detailed developer information (trace messages) |
FINEST | Highly detailed developer information (trace messages) |
OFF | Disable logging for all levels (do not capture any content) |
ALL | Enable logging for all levels (capture all content) |
Each log level has an integer value used to determine its severity, except for the two special log levels OFF and ALL.
By default, the first three log levels are always logged. To set other levels, we can use the following code:
logger.setLevel(Level.LogLevel); // 示例 logger.setLevel(Level.FINE);
In this example, only Level.FINE and above levels are set for logging. Delete all other log messages.
Now we need to log a log message, we use the log() method.
logger.log(Level.LogLevel, "log message"); // 示例 logger.log(Level.INFO, "This is INFO log level message");
有一些用于记录所需级别的速记方法。
logger.info( "这是INFO日志级别的消息"); logger.warning( "这是WARNING日志级别的消息");
然后,已通过设置的日志级别的所有日志请求都将转发到LogRecord。
注意:如果一个日志记录器的级别被设置为null,那么它的级别将从其父继承,以此类推。
过滤器(如果存在)决定LogRecord是否转发该日志记录。顾名思义,它根据特定的标准过滤日志消息。
如果LogRecord通过指定的条件,则仅从记录器传递到日志处理程序,并从日志处理程序传递到外部系统。
// 设置filter logger.setFilter(filter); // 获取 filter Filter filter = logger.getFilter();
日志处理程序或附加程序将接收LogRecord并将其导出到各种目标。
Java SE提供了5个内置处理程序:
处理程序 | Using |
---|---|
StreamHandler | 写入OutputStream |
ConsoleHandler | 写入控制台 |
FileHandler | 写入文件 |
SocketHandler | 写入到远程TCP端口 |
MemoryHandler | 写入内存 |
处理程序可以将LogRecord传递到过滤器,以再次确定是否可以将其转发到外部系统。
要添加新的处理程序,我们使用以下代码:
logger.addHandler(handler); // 示例 Handler handler = new ConsoleHandler(); logger.addHandler(handler);
要删除处理程序,我们使用以下代码:
logger.removeHandler(handler); // 示例 Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
一个记录器可以有多个处理程序。要获取所有处理程序,我们使用以下代码:
Handler[] handlers = logger.getHandlers();
处理程序还可以使用Formatter将LogRecord对象格式化为字符串,然后再将其导出到外部系统。
Java SE具有两个内置的Formatter:
Formatter | Using |
---|---|
SimpleFormatter | Format LogRecord as string |
XMLFormatter | Format LogRecord as XML format |
We can use the following code to format the handler:
// Formatted into string form handler.setFormatter(new SimpleFormatter()); // Formatted into XML format handler.setFormatter(new XMLFormatter());
Log ManagementGlobal records of information about object tracking. It reads and maintains log record configurations and logger instances.
The logger manager is a singleton, which means only one instance is instantiated.
To obtain the instance of the logger manager, we use the following code:
LogManager manager = new LogManager();
Here are some advantages of using Java logging.
Helps monitor the program's flow
Helps capture any errors that may occur
Supports problem diagnosis and debugging