1. 需要使用的两个包
log4j-core-xx.jar log4j-api-xx.jar
2. classpath为scr文件夹下
必须注意.xml 文件的文件名为log4j2
<?xml version="1.0" encoding="UTF-8"?>
<!-- status=debug 可以查看log4j的装配过程 -->
<Configuration status="off" monitorInterval="1800">
<properties>
<property name="LOG_HOME">logs/sample</property>
<property name="FILE_NAME">mylog</property>
</properties>
<Appenders>
<!-- 定义控制台输出 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<RollingRandomAccessFile name="running-log"
fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/
$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout
pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] -
%msg%n" />
<Policies>
<!-- 每天生成一个日志文件 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 每到10M生成一个日志文件 -->
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<!-- 最大保存文件数 -->
<DefaultRolloverStrategy max="20" />
</RollingRandomAccessFile>
<!-- 文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,-->
<!-- 这个也挺有用的,适合临时测试用 -->
<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>
<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入 -->
<!-- 按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36}
%L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="50MB"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.cnblogs.yjmyzz.App2" level="trace"
additivity="true">
<AppenderRef ref="running-log" />
</Logger>
<Root level="error">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
3. 参数说明
第3行
中的 monitorInterval=”1800″指log4j2每隔1800秒(半小时),自动监控该配置文件是否有变化,如果变化,则自动根据文件内容重新配置。
5-8行
定义了一些属性(可以根据需要自己随便添加),主要是为了后面引用起来方便。
16行
RollingRandomAccessFile 即表示以文件方式记录,注意一下filePattern的设置,它与24行的SizeBasedTriggeringPolicy(表示单个文件最大多少容量)结合在一起,非常有用,以这段配置为例,当单个文件达到10M后,会自动将以前的内容,先创建类似 2014-09(年-月)的目录,然后按 “xxx-年-月-日-序号”命名,打成压缩包。
27行
DefaultRolloverStrategy max=”20″表示压缩包,最多保留20个。
45-48行
定义了一个新logger,它的级别是trace,使用文件方式来记录日志,additivity=”true”这里注意一下,因为下面还有一个root logger,任何其它的logger最终都相当于继承自root logger,所以“com.cnblogs.yjmyzz.App2”这个logger中,如果记录了error及以上级别的日志,除了文件里会记录外,root logger也会生效,即:控制台也会输出一次。如果把additivity=”true” 中的true,改成false,root logger就不会再起作用,即只会记录在文件里,控制台无输出。
TimeBasedTriggeringPolicy 基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。有两个参数:
interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,比如yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟
modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算。比如,modulate=true,interval=4hours,那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,之后的封存时间依次为08:00,12:00,16:00,。。。