log4j2(一) 获取 ILoggerFactory
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j2(一) 获取 ILoggerFactory相关的知识,希望对你有一定的参考价值。
参考技术A 关于log4j2的初始化流程,现在项目基本都是springboot项目,就需要结合 springboot 源码来解析,这块可以参考 Springboot - Log4J2LoggingSystem源码解析因为spring-boot-starter依赖中日志使用的是spring-boot-starter-logging,这里面是用的是logback,所以需要先剔除此依赖
再添加log4j2依赖
如果我们想使用 yml 后缀的配置文件还需要再加一个依赖
然后相关依赖版本如下
以下源码基于 log4j 2.7。
先看一张log4j官方提供的类图
先简单了解一下这些类
过滤器的种类也很多,比如根据日志级别。Filter会返回一个枚举值Filter.Result,有三种:
详细参见 log4j - Filters
log4j的初始化流程实在有点饶,这里简要讲讲。
LoggerFactory#getLogger(String)
在只有一个log4j2的依赖时,加载流程大致如下:
在 getILoggerFactory() 方法中做了这么几件事
再看下 log4j2 的 StaticLoggerBinder 源码
下一篇看看后续Logger的获取。
添加 logback 依赖(直接放开 spring-boot-starter-logging 也行),这样我们项目就有两个 org/slf4j/impl/StaticLoggerBinder.class 了
然后启动,提示
我的疑问就是为啥不用log4j2而用logback,就打开这个网址查了下,里面最后有一段
告诉我们
好吧,随机的我也是醉了。。
参考
http://logging.apache.org/log4j/2.x/log4j-users-guide.pdf
http://www.slf4j.org/codes.html#multiple_bindings
回家,风雨兼程。
以上是关于log4j2(一) 获取 ILoggerFactory的主要内容,如果未能解决你的问题,请参考以下文章
在 log4j2 中从 ThreadContext 设置和获取值
即使在使用 Vert.x 和 Log4j2 将“isThreadContextMapInheritable”设置为 true 后也没有获取 ThreadContext 值