我们还是需要在Springboot当中来实战log4j2 首先就得需要看pom.xml文件了 入下图所示引入所需的依赖: ### ![](https://img.kancloud.cn/6f/09/6f09a60393ad42d687349af4276ae92e_1854x1504.png) ### 然后就是去创建log4j2.xml配置文件: ### ![](https://img.kancloud.cn/3b/04/3b0416aa5d7dda6a375b67064107deb6_1082x1030.png) ### 接下来我们贴出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当中默认就支持异步日志输出 看最底下的代码注释即可 ###