Java 日志记录
Java 日志记录
在本教程中,我们将通过示例了解 Java Logging 及其各种组件。
Java 允许我们通过日志记录的过程来创建和捕获日志消息和文件。
在 Java 中,日志记录需要框架和 API。 Java在java.util.logging
中有一个内置的日志框架 包。
我们还可以使用 Log4j、Logback 等第三方框架进行日志记录。
Java 日志组件
下图表示Java Logging API(java.util.logging
的核心组件和控制流程 )。
1。记录器
Logger
类提供记录方法。我们可以从 Logger
实例化对象 类并调用其方法进行日志记录。
举个例子吧。
Logger logger = Logger.getLogger("newLoggerName");
getLogger()
Logger
的方法 类用于查找或创建新的 Logger
.字符串参数定义记录器的名称。
在这里,这将创建一个新的 Logger
对象或返回现有的 Logger
同名。
定义 Logger
是一种约定 在当前类之后使用 class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
注意: 这个方法会抛出 NullPointerException
如果传递的名称是 null
.
每个 Logger
具有确定日志消息重要性的级别。有 7 个基本的日志级别:
日志级别(降序) | 使用 |
---|---|
严重 | 严重失败 |
警告 | 警告信息,潜在问题 |
信息 | 一般运行时信息 |
配置 | 配置信息 |
很好 | 一般开发者信息(跟踪消息) |
更精细 | 详细的开发者信息(跟踪消息) |
最好的 | 高度详细的开发者信息(跟踪消息) |
关闭 | 关闭所有级别的日志记录(不捕获任何内容) |
全部 | 打开所有级别的日志记录(捕获所有内容) |
每个日志级别都有一个整数值来确定它们的严重性,除了两个特殊的日志级别 OFF
和 ALL
.
记录消息
默认情况下,始终记录前三个日志级别。要设置不同的级别,我们可以使用以下代码:
logger.setLevel(Level.LogLevel);
// example
logger.setLevel(Level.FINE);
在这个例子中,只有级别 FINE
并且高于它的级别被设置为被记录。所有其他日志消息都将被删除。
现在要记录一条消息,我们使用 log()
方法。
logger.log(Level.LogLevel, "log message");
// example
logger.log(Level.INFO, "This is INFO log level message");
有一些速记方法可以在所需级别进行日志记录。
logger.info( "This is INFO log level message");
logger.warning( "This is WARNING log level message");
所有通过设置日志级别的日志请求然后转发到 LogRecord .
注意: 如果记录器的级别设置为 null
,它的级别是从它的父级继承的,依此类推。
2。过滤器
过滤器(如果存在)确定 LogRecord 应该转发还是不转发。顾名思义,它根据特定条件过滤日志消息。
一个日志记录 仅在通过指定条件时才从记录器传递到日志处理程序并从日志处理程序传递到外部系统。
// set a filter
logger.setFilter(filter);
// get a filter
Filter filter = logger.getFilter();
3.处理程序(附加程序)
日志处理程序或附加程序接收 LogRecord 并将其导出到各种目标。
Java SE 提供了 5 个内置的处理程序:
处理程序 | 使用 |
---|---|
StreamHandler | 写入 OutputStream |
ConsoleHandler | 写入控制台 |
FileHandler | 写入文件 |
SocketHandler | 写入远程 TCP 端口 |
MemoryHandler | 写入内存 |
处理程序可以传递 LogRecord 到一个过滤器,以再次确定它是否可以转发到外部系统。
要添加新的处理程序,我们使用以下代码:
logger.addHandler(handler);
// example
Handler handler = new ConsoleHandler();
logger.addHandler(handler);
要删除处理程序,我们使用以下代码:
logger.removeHandler(handler);
// example
Handler handler = new ConsoleHandler();
logger.addHandler(handler);
logger.removeHandler(handler);
一个记录器可以有多个处理程序。要获取所有的处理程序,我们使用以下代码:
Handler[] handlers = logger.getHandlers();
4.格式化程序
处理程序也可以使用 Formatter 格式化 LogRecord 在将对象导出到外部系统之前将其转换为字符串。
Java SE 有两个内置的 Formatter :
格式化程序 | 使用 |
---|---|
SimpleFormatter | 格式 日志记录 到字符串 |
XMLFormatter | 格式 日志记录 转成 XML 格式 |
我们可以使用以下代码来格式化处理程序:
// formats to string form
handler.setFormatter(new SimpleFormatter());
// formats to XML form
handler.setFormatter(new XMLFormatter());
日志管理器
日志管理器 对象跟踪全局日志信息。它读取并维护日志记录配置和记录器实例。
日志管理器是单例的,这意味着它只有一个实例被实例化。
获取日志管理器实例,我们使用如下代码:
LogManager manager = new LogManager();
记录的优势
以下是使用 Java 登录的一些优点。
- 有助于监控程序的流程
- 有助于捕捉可能发生的任何错误
- 为问题诊断和调试提供支持
java