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.Log4jContextFactorygetContext方法读取配置文件

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配置文件根属性有statusdestshutdownHookshutdownTimeoutverbosepackagesnamestrictschemamonitorIntervaladvertiser。这些属性定义在

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像一个分发器。LoggerAppend是一个多对多的关系(多数情况下是用的是一对一的简单场景)

 

6 名词解析

DefaultRolloverStrategy(默认): 有一个主文件,触发拆分事件后,主文件改名,然后继续新建主文件写入。

DirectWriteRolloverStrategy: 没有主文件,直接在分文件上写。

5 配置样例

5.1 所有日志走console, 部分日志走A1, 如果不想走console,additivity=false

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章