从前有个老头叫<configuration>,他有两个儿子,忠厚老实的老大叫<appenders>,
并且<appenders>有三个儿子,分别叫<console>,<File>和<RollingFile>。这三个都是比较有才华的小伙子。
另一个处事圆滑的老二叫<loggers>,年轻时放荡不羁,留恋纸醉迷金的生活,至今没有成家,但是长时间混迹在大城市中的他,倒也有些名气,好多人偷偷送礼托他办事。
这是家谱:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appenders>
<File></File>
<console></console>
<RollingFile></RollingFile>
</appenders>
<loggers>
</loggers>
</configuration>
我们来详细介绍一下
老头configuration
<configuration status="OFF" monitorInterval="30">
</configuration>
status:
这是日志自身的日志。一般写off,代表关闭不显示。
八个日志级别以及优先级排序: OFF(关闭) > FATAL(致命的) > ERROR > WARN > INFO > DEBUG > TRACE(堆栈) >
monitorInterval:
刷新此文件的时间间隔,保证修改后的文件及时生效。
大孙子<console>
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
很显然配置这个是大孙子能够将日志输出至控制台。
二孙子<File>
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
二孙子的擅长将日志写在指定文件夹下的文件里。
fileName:
是生成的日志文件路径加名称以及后缀名, log/test.log指在跟目录log文件夹下的test.log
append:
的值为Bollean类型,当为true的时候 ,日志会追加,否则将覆盖。
小孙子<RollingFile>
<RollingFile name="RollingFileInfo" fileName="logs/info.log" filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
SizeBasedTriggeringPolicy:一个小孙子的大小,
<ThresholdFilter level:日志级别。
小孙子擅长将老头子教的八个日志级别分类保存文件里,小孙子可以有多个,一个负责一个级别的日志,至于为什么小孙子可以有多个?这不合情理?,因为他是孙悟空啊。
老头子见到三个孙子各个身怀绝技了,该去大城市闯荡闯荡了,但是他们的爹<appenders>,虽然稳重能干,但是对大城市的情况时一无所知。所以必须让老二<loggers>来帮这三个孙子指路。
在将要踏上去大城市的路上之前,二孙子<File>突然改变了想法,他认为不去大城市也能做出成绩。
老二<loggers>:
老二<loggers>让他的助理<root>老司机,负责带<Console>和<RollingFileInfo>飞。
<loggers>
<root level="all">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
</root>
</loggers>
后来,<console>和<RollingFile>在二叔的得力助手<root>的指引下,为祖国的建设做的了巨大的贡献。正如<File>所说,<File>虽然没有二叔的指导,但是也做出了不小的成就。
下面是完整版
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF(关闭) > FATAL(致命的) > ERROR > WARN > INFO > DEBUG > TRACE(堆栈) > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="OFF" monitorInterval="30">
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>