日志实现框架的基本用法
-
1. Logging (java自带的日志框架——JUL)
-
2. log4j
-
3. Logback
1. Logging (java自带的日志框架——JUL)
使用JUL不需要导入依赖,因为是继承自JDK内部的,使用的时候只需要进行简单的导包就好了。
日志功能的实现基本靠一下几个组件来完成:
-
Loggers: Logger负责捕捉事件并将其发送给合适的Appender
-
Appenders:也称为Handlers,负责从Logger中取出日志消息,并使用Layout来格式化消息,然后将消息发送出去,比如发送到控制台、文件或其他日志收集系统。
-
Layouts: 也称为Formatters,负责对日志事件进中的数据进行转换和格式化。
-
Filters: 过滤器,根据需要定制哪些信息会被记录,哪些信息会被放过。
-
Formatter: 输出格式控制
总结一下就是:用户使用Logger来进行日志记录,Logger持有若干个Handler,日志的输出操作是由Handler完成的。在Handler在输出日志前,会经过Filter的过滤,判断代码是否可以继续执行,Filter返回false,日志方法return,Handler不会处理;Filter返回true,则继续向下执行,Handler会将日志内容输出到指定位置(日志文件、控制台等)。Handler在输出日志时会使用Layout,将输出内容进行排版。
1. JUL提供多种日志处理器
-
StreamHandler:用于将格式化记录写入OutputStream的简单处理程序。
-
ConsoleHandler:用于将格式化记录写入System.err的简单处理程序
-
FileHandler:将格式化日志记录写入单个文件或一组旋转日志文件的处理程序。
-
SocketHandler:将格式化日志记录写入远程TCP端口的处理程序。
-
MemoryHandler:缓冲内存中日志记录的处理程序。
2. JUL提供了两种日志输出格式
- SimpleFormatter:写简短的“人类可读”日志记录摘要。 - XMLFormatter:写入详细的XML结构信息。
3. JUL的LogManager
LogManager 被称为Logger的管理器,当我们获取Logger本质是从LogManager获取,LogManager内部通过LoggerContext类对象来存储logger,并维护logger之间的父子关系。实现原理是将每个Looger封装为LogNode节点,存在在一个树状结构中。
该框架的简单使用如下所示
//1. 获取日志对象
Logger logger = Logger.getLogger(String.valueOf(getClass()));
// a. 关闭系统默认配置
logger.setUseParentHandlers(false);
// b. 创建Handler
ConsoleHandler consoleHandler = new ConsoleHandler();
// c. 创建formatter对象
// 作用: 用来格式化LogRecord的
SimpleFormatter formatter = new SimpleFormatter();
// d. 进行关联(绑定日志的处理器、设置日志的输出格式)
logger.addHandler(consoleHandler);
consoleHandler.setFormatter(formatter);
//2. 设置日志级别
logger.setLevel(Level.ALL);
consoleHandler.setLevel(Level.ALL);
/*日志输出简写形式,有不同级别*/
logger.severe("severe log");