log4j的配置可以通过以下四种方式完成:
- 通过XML, JSON, YAML, 或者 properties格式的配置文件。
- 通过ConfigurationFactory 和 Configuration的实现。
- 通过Configuration 暴露的接口为默认配置增加实现组件。
- 通过内部的Logger类方法调用。
本文只对第一种实现方式做粗略阐述。
自动发现配置
log4j启动时会自动寻找到所有的ConfigurationFactory 插件并进行优先级排序,log4j包括四种ConfigurationFactory 实现,针对JSON、YAML、properties、XML各一个。优先级排序如下:
log4j.configurationFile
log4j2-test.properties
log4j2-test.yaml(log4j2-test.yml)
log4j2-test.json(log4j2-test.jsn)
log4j2-test.xml
log4j2.properties
log4j2.yaml(log4j2.yml)
log4j2.json(log4j2.jsn)
log4j2.xml
DefaultConfiguration
如果你没有写配置文件,会如何?
log4j会使用默认配置,其相关类是DefaultConfiguration.java
,与其等价的xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
日志输出级别是error
,输出目的地是Console
。这意味着只有error
及以上水平的日志才会被输出到控制台上。
配置文件解析
就依然上面这个配置文件进行阐述,主要包括Appenders
和Loggers
两个部分,Appenders
主要说明日志的输出目的地,而Loggers
主要说明都有哪些日志记录器。Loggers中一个根日志记录器Root
,其他用户自定义的日志记录器(Logger 标签)都会继承它,日志记录器中AppenderRef
标签会说明此日志记录器输出的日志会流向哪里(目的地在Appenders标签中定义)。
网友评论