日志实现框架
Log4j
Log4j
是目前最为流行的Java日志框架
之一,1999年
发布首个版本,2012年
发布最后一个版本,2015年
正式宣布终止,官方也已不建议使用,并逐步被Logback
和Log4j2
等日志框架所替代,可是无法掩饰光辉历程,以及优良的设计理念。尽管Log4j
有着出色的历史战绩,但早已不是Java
日志框架的最优选择,还在使用该日志框架的项目往往是历史遗留问题。
Log4j API
核心类:
- 日志对象:
org.apache.log4j.Logger
- 日志级别:
org.apache.log4j.Level
- 日志管理器:
org.apache.log4j.LogManager
- 日志仓储:
org.apache.log4j.spi.LoggerRepository
- 日志附加器:
org.apache.log4j.Appender
- 日志过滤器:
org.apache.log4j.spi.Filter
- 日志格式布局:
org.apache.log4j.Layout
- 日志事件:
org.apache.log4j.LoggingEvent
- 日志配置器:
org.apache.log4j.spi.Configurator
- 日志诊断上下文:
org.apache.log4j.NDC
、org.apache.log4j.MDC
JUL
Java Logging
是Java
标准的日志框架,也称为Java Logging API
,即JSR 47
。从Java 1.4
版本开始,Java Logging
成为Java SE
的功能模块,其实现类存放在java.util.logging
包下。
使用Java Logging
最大好处是它属于JDK内置
,不需要添加额外依赖,默认配置文件位于:jre/lib/logging.properties
,具体可以查看LogManager
类readConfiguration
方法,启动的时候可以通过设置VM
参数java.util.logging.config.file
指定配置文件。
Java Logging API
核心类:
- 日志对象:
java.util.logging.Logger
- 日志级别:
java.util.logging.Level
- 日志管理器:
java.util.logging.LogManager
- 日志处理器:
java.util.logging.Handler
- 日志过滤器:
java.util.logging.Filter
- 日志格式器:
java.util.logging.Formatter
- 日志记录:
java.util.logging.LogRecord
- 日志权限:
java.util.logging.LoggingPermission
- 日志JMX接口:
java.util.logging.LoggingMXBean
Logback
Logback
是Log4j
创始人设计的又一个开源日志框架,可以看成Log4j
的替代者,在架构和特征上有着相当提升。Logback
当前分成三个模块:
logback-core
:其它两个模块的基础模块,提供一些关键的通用机制logback-classic
:地位和作用等同于Log4j
,也被认为是Log4j
的一个改进版,并且实现了SLF4J API
logback-access
:logback-access
访问模块与Tomcat
、Jetty
等Servlet容器
集成配置Http
访问的access日志
Logback
核心类:
- 日志对象:
ch.qos.logback.classic.Logger
- 日志级别:
ch.qos.logback.classic.Level
- 日志管理器:
ch.qos.logback.classic.LoggerContext
- 日志附加器:
ch.qos.logback.core.Appender
- 日志过滤器:
ch.qos.logback.core.filter.Filter
- 日志格式布局:
ch.qos.logback.core.Layout
- 日志事件:
ch.qos.logback.classic.spi.LoggingEvent
- 日志配置器:
ch.qos.logback.classic.spi.Configurator
核心架构
上图是logback
日志框架的输出日志的核心流程:
Logger
作为日志框架的代言人,程序开发通过Logger
即可完成日志输出工作;Logger
拿到程序传入的日志信息,通过Filter
进行过滤,一般是对日志级别Level
进行过滤,然后将符合条件的日志封装成LoggingEvent
对象,并交接给关联的Appender
对象进行后续处理;Appender
完成日志输出工作,一般Appender
也会有个Filter
过滤流程,将过滤成功的日志输出到控制台、文件、网络等操作;