我们还是需要在Springboot当中来实战log4j2 首先就得需要看pom.xml文件了 入下图所示引入所需的依赖:
###

###
然后就是去创建log4j2.xml配置文件:
###

###
接下来我们贴出log4j2的配置文件 重点去看里面的注释信息:
###
```
<?xml version="1.0" encoding="UTF-8"?>
<!-- status="off"表示是否开启log4j2自己本身的日志输出默认off即可 monitorInterval="1800"表示半小时扫描log4j2是否变动过-->
<Configuration status="off" monitorInterval="1800">
<!-- 全局变量配置 -->
<Properties>
<!-- 设置所有日志的存放的根路径 -->
<property name="LOG_PATH" value="/Users/leasure/project-logs"/>
<!-- 日志的输出格式 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-10thread] %-5level | %logger{50} : %msg%n"/>
<!-- 日志保存的时间2天 -->
<property name="SAVE_TIME" value="2d"/>
</Properties>
<Appenders>
<!-- console控制台上的日志输出 -->
<Console name="CONSOLE_LOGGER">
<!-- <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>-->
<!-- 配置日志输出格式 就用上面我们定义好的LOG_PATTERN -->
<PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/>
</Console>
<!-- debug -->
<RollingRandomAccessFile name="DEBUG_LOGGER"
fileName="${LOG_PATH}/demoProject-debug.log"
filePattern="${LOG_PATH}/debug/demoProject-debug-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/>
<Filters>
<LevelRangeFilter minLevel="debug" maxLevel="debug" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${LOG_PATH}/debug" maxDepth="2">
<IfFileName glob="*.log.gz"/>
<IfLastModified age="${SAVE_TIME}"/>
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
<!-- info -->
<!-- name定义一个名字下面会用到 fileName定义一下日志的存放路径 filePattern用来设置日志打包的格式和路径 -->
<RollingRandomAccessFile name="INFO_LOGGER"
fileName="${LOG_PATH}/demoProject-info.log"
filePattern="${LOG_PATH}/info/demoProject-info-%d{yyyy-MM-dd}-%i.log.gz">
<!-- 指定日志的输出格式 我们采用的是上面定义好的LOG_PATTERN -->
<PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/>
<Filters>
<!-- 这种方式在info当中会保存info以及info以上级别的日志 -->
<!-- <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>-->
<!-- 方式一 我们就采用这种方式即可 表示我们只接收info级别的日志 其他级别的我们不接收 minLevel和maxLevel都要写info 表示级别从info到info 上面和下面这两种方式就直接忽略吧 -->
<LevelRangeFilter minLevel="info" maxLevel="info" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 方式二 -->
<!-- <ThresholdFilter level="INFO"/>-->
<!-- <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>-->
</Filters>
<!-- 策略配置 -->
<Policies>
<!-- 表示1天打一个包 因为上面我们配置的${LOG_PATH}/debug/demoProject-debug-%d{yyyy-MM-dd}-%i.log.gz是天 所以这里的1表示的就是1天 -->
<!-- <TimeBasedTriggeringPolicy interval="1" modulate="true"/> -->
<!-- 表示1M大小就会进行打一个包 要么用上面的要么用这个 选择一个打包方式就好 -->
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<!-- default=7 -->
<!-- 如果开启下面的删除策略,这里必须使用默认7 不然底下的删除策略不会生效 所以这里最好不要开启 用默认的7即可 表示最大给你保存7个压缩包文件的日志文件-->
<!-- <DefaultRolloverStrategy max="10"/>-->
<!-- 表示配置删除策略 -->
<DefaultRolloverStrategy>
<!-- 配置删除日志的路径 maxDepth="2"表示2层文件夹深度 因为我们在设置的日志根目录下又创建了info 所以这里是2 如果你info下面还有文件夹那就是3 根据自己实际情况而定-->
<Delete basePath="${LOG_PATH}/info" maxDepth="2">
<!-- 配置删除的日志匹配规则 -->
<IfFileName glob="*.log.gz"/>
<!-- 配置删除的时间周期 也就是我们上面配置的SAVE_TIME=2d 也就是2d之前的日志你是看不到的因为被删除了 但是线上你可以配置30d -->
<IfLastModified age="${SAVE_TIME}"/>
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
<!-- error -->
<RollingRandomAccessFile name="ERROR_LOGGER"
fileName="${LOG_PATH}/demoProject-error.log"
filePattern="${LOG_PATH}/error/demoProject-error-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/>
<Filters>
<LevelRangeFilter minLevel="error" maxLevel="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${LOG_PATH}/error" maxDepth="2">
<IfFileName glob="*.log.gz"/>
<IfLastModified age="${SAVE_TIME}"/>
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- 要么开启全同步 要么开启全异步 -->
<!-- 全异步 includeLocation="true"表示打印出行号 -->
<AsyncRoot level="info" includeLocation="true">
<AppenderRef ref="DEBUG_LOGGER"/>
<AppenderRef ref="INFO_LOGGER"/>
<AppenderRef ref="ERROR_LOGGER"/>
<AppenderRef ref="CONSOLE_LOGGER"/>
</AsyncRoot>
<!-- 全同步 -->
<Root level="DEBUG" includeLocation="true">
<AppenderRef ref="DEBUG_LOGGER"/>
<AppenderRef ref="INFO_LOGGER"/>
<AppenderRef ref="ERROR_LOGGER"/>
<AppenderRef ref="CONSOLE_LOGGER"/>
</Root>
</Loggers>
</Configuration>
```
###
主要是去看里面的info级别配置的注释信息 其他的debug error都是类似的
###
另外log4j2当中默认就支持异步日志输出 看最底下的代码注释即可
###