<?xml version="1.0" encoding="UTF-8"?>
<!--
status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。
-->
<Configuration status="WARN" monitorInterval="60">
<Properties>
<!-- 配置日志文件输出目录 -->
<property name="root_path" value="/Log/server" />
<property name="backup_path" value="${root_path}/backup" />
<property name="log_file_prefix" value="${sys:log4j2.fileName}"></property>
<property name="log_charset">UTF-8</property>
<!--保留90天的日志信息-->
<property name="max_num">90d</property>
<property name="log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{1.}:%L(%M) - %msg%xEx%n</property>
</Properties>
<Appenders>
<!--这个输出控制台的配置-->
<Console name="STDOUT" target="SYSTEM_OUT">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 输出日志的格式 -->
<PatternLayout charset="${log_charset}" pattern="${log_pattern}"/>
</Console>
<!-- 设置日志格式并配置日志压缩格式(business.log.年份.zip) -->
<RollingRandomAccessFile name="BUSINESS_FILE" immediateFlush="false"
fileName="${root_path}/${log_file_prefix}_system.log"
filePattern="${backup_path}/${log_file_prefix}_system.log.%d{yyyy-MM-dd-HH}.zip">
<!--
%d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间
%p : 日志输出格式
%c : logger的名称
%m : 日志内容,即 logger.info("message")
%n : 换行符
%C : Java类名
%L : 日志输出所在行数
%M : 日志输出所在方法名
hostName : 本地机器名
hostAddress : 本地ip地址
-->
<PatternLayout charset="${log_charset}">
<pattern>${log_pattern}</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${backup_path}" maxDepth="1">
<IfFileName glob="${log_file_prefix}_system.log.*.zip" />
<IfLastModified age="${max_num}" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
<!-- 设置日志格式并配置日志压缩格式(exception.log.年份.zip) -->
<RollingRandomAccessFile name="EXCEPTION_FILE" immediateFlush="false"
fileName="${root_path}/${log_file_prefix}_exception.log"
filePattern="${backup_path}/${log_file_prefix}_exception.log.%d{yyyy-MM-dd-HH}.zip">
<PatternLayout charset="${log_charset}">
<pattern>${log_pattern}</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${backup_path}" maxDepth="1">
<IfFileName glob="${log_file_prefix}_exception.log.*.zip" />
<IfLastModified age="${max_num}" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- 配置日志的根节点 -->
<asyncRoot level="info">
<appender-ref ref="STDOUT"/>
</asyncRoot>
<asyncLogger name="systemLogger" level="info" additivity="false" includeLocation="true">
<appender-ref ref="BUSINESS_FILE"/>
</asyncLogger>
<asyncLogger name="exceptionLogger" level="info" additivity="false" includeLocation="true">
<appender-ref ref="EXCEPTION_FILE"/>
</asyncLogger>
</Loggers>
</Configuration>
其中 【sys:log4j2.fileName】可以在系统参数中设置或程序启动时指定,而<DefaultRolloverStrategy> 标签属性的max只是针对SizeBaseDTriggeringPolicy策略属性起作用,而对于其他属性,需要设置删除属性标签<Delete>,如上面的例子中,下列设置
age的大小单位可以设置为d(天),h(小时),m(分钟),s(秒)