Log4j2 对于生成日志文件时,可以通过对<File>中的<Policies>进行设置,来完整日志文件各种生成方案
定期生成日志文件
log4j2.xml
<Configuration status="WARN" monitorInterval="300"> <properties> <property name="LOG_HOME">user/logs</property> </properties> <Appenders> <RollingRandomAccessFile name="logfile" fileName="${LOG_HOME}/app.log" filePattern="${LOG_HOME}/app-%d{yyyy-MM-dd}.log"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </Policies> </RollingRandomAccessFile> <DefaultRolloverStrategy max="20"/> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="logfile" /> </Root> </Loggers> </Configuration>
此时日志按天数产生,及每天产生一个新的日志文件,其中关键的地方在于 <RollingRandomAccessFile> filepattern属性和<TimeBasedTriggeringPolicy> 的设置;
<RollingRandomAccessFile > filepattern 中的日期格式精确位数决定了生成日志的日期单位,<TimeBasedTriggeringPolicy> interval 决定该单位下的间隔数,如果在上面例子中 interval 设置为 5,那么就是5天生成一个日志;
如果按月生成日志,那么 filePath 修改为 ${LOG_HOME}/app-%d{yyyy-MM}.log
按小时生成日志,filePath = ${LOG_HOME}/app-%d{yyyy-MM-dd-HH-mm}.log
上面例子中的 <DefaultRolloverStrategy max="20"/> 用于设置符合同个filePath的日志文件的最大数量,超过这个数量时,新产生的日志文件会覆盖旧的日志文件,没有设置时,默认值为7;
定大小生成日志文件
log4j2.xml
<Configuration status="WARN" monitorInterval="300"> <properties> <property name="LOG_HOME">user/logs</property> </properties> <Appenders> <RollingRandomAccessFile name="logfile" fileName="${LOG_HOME}/app.log" filePattern="${LOG_HOME}/error-%i.log"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> <Policies> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> </RollingRandomAccessFile> <DefaultRolloverStrategy max="20"/> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="logfile" /> </Root> </Loggers> </Configuration>
其中 <SizeBasedTriggeringPolicy size="10 MB" /> 用于设置单个日志文件的大小上限,<RollingRandomAccessFile> filepattern 中的 "%i" 输出文件的次序,<DefaultRolloverStrategy> 设置设置符合同个filePath的日志文件的最大数量;