log4j2的学习笔记
1总结
1.1 log4j2本身是支持log4j2.properties配置的,只是log4j2.properties的配置格式完成不同于1版本,或者说没有向前兼容。
2 slf4j+log4j2组合
slf4j+log4j2的启动入口是org.slf4j.LoggerFactory.getLogger(XXX.class) 一旦调这个方法,就开始启动初始化,如果不调,即便项目中有对应的架包,也不执行初始化。
ClassLoader.getResources("org/slf4j/impl/StaticLoggerBinder.class")去寻找日志实现类。
3 log4j2配置相关
org.apache.logging.log4j.core.impl.Log4jContextFactory的getContext方法读取配置文件
由org.apache.logging.log4j.core.config.ConfigurationFactory处理参数配置
读了配置文件的优先顺序 proerties -> yaml -> json -> xml
[class org.apache.logging.log4j.core.config.properties.PropertiesConfigurationFactory,
class org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory,
class org.apache.logging.log4j.core.config.json.JsonConfigurationFactory,
class org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory]
读取xml配置文件的终级类是org.apache.logging.log4j.core.config.xml.XmlCon
Figuration
Xml配置文件根属性有status、dest、shutdownHook、shutdownTimeout、verbose、packages、name、strict、schema、monitorInterval、advertiser。这些属性定义在
org.apache.logging.log4j.core.config.xml.XmlConfiguration.XmlConfiguration(LoggerContext, ConfigurationSource)第100行左右
属性 |
作用 |
dest |
可以指定一个文件,这个文件会打印log4j2启动时显示的一个日志(同时status="trace"),帮助排查原因。 |
shutdownHook |
是否开启关闭监听。disable是关闭 |
shutdownTimeout |
关闭的超时时间 |
packages |
指定包下面的插件也加入到log4j中 |
monitorInterval |
定时扫描配置文件的时间间隔 |
advertiser |
定时器的名字,随便取比如,abc |
所有的配置组件都有实现@PluginFactory的方法,框架通过这个方法,传入参数,通过反射机制完成组件实例化。
元素 |
对应类 |
Logger |
org.apache.logging.log4j.core.config.LoggerConfig.createLogger(boolean, Level, String, String, AppenderRef[], Property[], Configuration, Filter) |
appender |
org.apache.logging.log4j.core.appender.RollingFileAppender.Builder.build() |
layout |
org.apache.logging.log4j.core.layout.PatternLayout.Builder.build() |
AppenderRef |
org.apache.logging.log4j.core.config.AppenderRef.createAppenderRef(String, Level, Filter) |
RollingFile |
org.apache.logging.log4j.core.appender.RollingFileAppender.Builder.build() |
property |
org.apache.logging.log4j.core.config.Property.createProperty(String, String) |
RootLogger |
org.apache.logging.log4j.core.config.LoggerConfig.RootLogger.createLogger(String, Level, String, AppenderRef[], Property[], Configuration, Filter) |
Logger像一个收集器。Append像一个分发器。Logger和Append是一个多对多的关系(多数情况下是用的是一对一的简单场景)
6 名词解析
DefaultRolloverStrategy(默认): 有一个主文件,触发拆分事件后,主文件改名,然后继续新建主文件写入。
DirectWriteRolloverStrategy: 没有主文件,直接在分文件上写。
5 配置样例
5.1 所有日志走console, 部分日志走A1, 如果不想走console,就additivity=false
posted on 2022-04-04 20:43 angelshelter 阅读(56) 评论(0) 编辑 收藏 举报