log4j2使用配置
log4j2支持配置滚动文件及删除策略,正确使用的场景下可以固定服务器的磁盘使用在设定的阀值内,不用关注磁盘被刷爆的情况,以下是项目中使用到的配置
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN" monitorInterval="0"> <Properties> <Property name="LOG.LEVEL">INFO</Property> <Property name="LOG.HOME">/export/Logs/business-log</Property> <Property name="LOG.PATTERN">[%p]%d{yyyy-MM-dd HH:mm:ss.SSS}|%X{traceId}|%msg[%c{1}#%M:%L][%t]%n</Property> <Property name="bufferSize">8192</Property> <Property name="interval">1</Property> <Property name="immediateFlush">false</Property> <Property name="append">true</Property> <Property name="includeLocation">false</Property> </Properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="${LOG.PATTERN}" /> </Console> <!-- debug,info,warn --> <RollingRandomAccessFile name="info" fileName="${LOG.HOME}/info/info.log" filePattern="${LOG.HOME}/info/info-%d{yyyyMMdd}-%i.log" bufferSize="${bufferSize}" immediateFlush="${immediateFlush}" append="${append}"> <Filters> <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="${LOG.PATTERN}" /> <Policies> <TimeBasedTriggeringPolicy interval="${interval}" modulate="true" /> <SizeBasedTriggeringPolicy size="500MB" /> </Policies> <DefaultRolloverStrategy> <Delete basePath="${LOG.HOME}/info" maxDepth="1"> <IfFileName glob="info-*.log"> <IfAny> <IfAccumulatedFileCount exceeds="40" /> </IfAny> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile> <!-- error --> <RollingRandomAccessFile name="error" fileName="${LOG.HOME}/error/error.log" filePattern="${LOG.HOME}/error/error-%d{yyyyMMdd}-%i.log" bufferSize="${bufferSize}" immediateFlush="${immediateFlush}" append="${append}"> <Filters> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="${LOG.PATTERN}"/> <Policies> <TimeBasedTriggeringPolicy interval="${interval}" modulate="true" /> <SizeBasedTriggeringPolicy size="100MB" /> </Policies> <DefaultRolloverStrategy> <Delete basePath="${LOG.HOME}/error" maxDepth="1"> <IfFileName glob="error-*.log"> <IfAny> <IfAccumulatedFileCount exceeds="40" /> </IfAny> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile> <!-- business log --> <RollingFile name="business.log" fileName="${LOG.HOME}/Business/business.log" filePattern="${LOG.HOME}/Business/business.%i.log"> <Filters> <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout charset="UTF-8"/> <Policies> <SizeBasedTriggeringPolicy size="100MB"/> </Policies> <DefaultRolloverStrategy max="10"/> </RollingFile> </Appenders> <Loggers> <AsyncLogger name="java.sql" level="warn" /> <AsyncLogger name="java.sql.ResultSet" level="warn" /> <AsyncLogger name="org.springframework" level="warn" /> <AsyncLogger name="com.ibatis" level="warn" /> <AsyncLogger name="org.mybatis.spring" level="warn" /> <AsyncLogger name="org.apache.ibatis" level="warn" /> <AsyncLogger name="org.apache" level="warn" /> <AsyncLogger name="org.apache.commons" level="warn" /> <AsyncLogger name="io.netty" level="warn" /> <AsyncLogger name="com.alibaba" level="warn" /> <AsyncLogger name="com.datastax.driver.core" level="warn" /> <!-- 操作日志 --> <AsyncLogger name="BusinessLogWriter" level="info" additivity="false"> <AppenderRef ref="business.log" /> </AsyncLogger> <!-- 业务日志异步输出 --> <AsyncLogger name="businessWriter" level="${LOG.LEVEL}" includeLocation="${includeLocation}" additivity="false"> <AppenderRef ref="info" /> <AppenderRef ref="error" /> </AsyncLogger> <Root level="${LOG.LEVEL}" includeLocation="${includeLocation}"> <AppenderRef ref="info" /> <AppenderRef ref="error" /> </Root> </Loggers> </Configuration>
<Policies> 决定是否执行rollover操作,<DefaultRolloverStrategy>决定如何完成rollover
Policies中配置的TimeBasedTriggeringPolicy,基于时间触发是否执行rollover,interval 默认是1,这个单位是依据filePattern后的日期格式,日期格式精确到哪一位,interval也精确到哪一个单位
DefaultRolloverStrategy中配置max属性决定触发内部执行删除的前提条件,默认的是7,IfAccumulatedFileCount设置的是超过的文件数量
官方文档:https://logging.apache.org/log4j/2.x/faq.html#which_jars
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.2</version>
</dependency>
浙公网安备 33010602011771号