log4j2官网:https://logging.apache.org/log4j/2.x/
配置log4j2
application.properties
logging.config= classpath:config/log4j2-dev.xml
maven配置
<dependency> <!-- 引入log4j2依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!--移除spring boot 原生logging的依赖-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
spi 用户实现的接口
Logger -> Appender -> Filter -> Layout -> ObjectRenderer -> Destination
日志对象 Logger
日志级别 Level
日志管理器 LogManager 初始化默认log配置 维护日志仓储 获取日志对象
日志仓储 LoggerRepository 管理日志级别阈值 管理日志对象
日志附加器 Appender 具体输出介质 附加日志事件 关联日志布局 关联日志过滤器 关联错误处理器 Console 文件 file rollingFile dailyRollingFile Socket JMS SMTP Async
日志过滤器 Filter DENY ACCEPT NEUTRAL
日志格式布局 Layout 简单格式 模式格式 提升模式格式 html格式 xml格式 ttcc格式
日志事件 LoggingEvent 日志事件是用于承载日志信息的对象 日志名称 日志内容 日志级别 异常信息 当前线程名称 时间戳 嵌入诊断上下文NDC 映射诊断上下文MDC
日志配置器 Configurator 重点* 外部配置文件配置log4j行为的api 配置文件间接调用api 1.properties 2.xml
日志诊断上下文 NDC嵌套 push pop 堆栈 MDC映射KeyValue的形式存储诊断信息 占位符 最终输出的内容
1.错误日志,有必要记录e.printStackTrace()信息吗
有必要,但多的时候可以通过JVM来控制异常栈输出
2.怎么判断我该把这个日志记录在哪个级别
DEBUG 级别记录一些上下文参数,以及输出结果
INFO 级别记录一些操作成功或者失败,类似于黑盒结果
WARN 级别记录 CPU,一些阈值达到了,或者不主要的输入输出
ERROR 记录一些相关的错误
3.MDC
log(“some error”)//没法传递用户ID,可以通过MDC的方式 在上文传递用户ID