宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述第十一节:Springboot整合log4j2日志相关的知识,希望能为你提供帮助。
为什么选用log4j2
文章图片
pom.xml中引入
log4j2
<
dependency>
<
groupId>
org.springframework.boot<
/groupId>
<
artifactId>
spring-boot-starter-web<
/artifactId>
<
exclusions>
<
!-- 去掉springboot默认配置 -->
<
exclusion>
<
groupId>
org.springframework.boot<
/groupId>
<
artifactId>
spring-boot-starter-logging<
/artifactId>
<
/exclusion>
<
/exclusions>
<
/dependency>
<
dependency>
<
!-- 引入log4j2依赖 -->
<
groupId>
org.springframework.boot<
/groupId>
<
artifactId>
spring-boot-starter-log4j2<
/artifactId>
<
version>
1.4.7.RELEASE<
/version>
<
/dependency>
log4j2
的配置文件<
?xml version="1.0" encoding="UTF-8"?>
<
!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<
!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<
configuration monitorInterval="5">
<
!--日志级别以及优先级排序: OFF >
FATAL >
ERROR >
WARN >
INFO >
DEBUG >
TRACE >
ALL -->
<
!--变量配置-->
<
Properties>
<
!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<
!-- %logger36 表示 Logger 名字最长36个字符 -->
<
property name="LOG_PATTERN" value="https://www.songbingjia.com/android/%dateHH:mm:ss.SSS [%thread] %-5level %logger36 - %msg%n" />
<
!-- 定义日志存储的路径 -->
<
property name="FILE_PATH" value="https://www.songbingjia.com/android/更换为你的日志路径" />
<
property name="FILE_NAME" value="https://www.songbingjia.com/android/更换为你的项目名" />
<
/Properties>
<
appenders>
<
console name="Console" target="SYSTEM_OUT">
<
!--输出日志的格式-->
<
PatternLayout pattern="$LOG_PATTERN"/>
<
!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<
ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<
/console>
<
!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
<
File name="Filelog" fileName="$FILE_PATH/test.log" append="false">
<
PatternLayout pattern="$LOG_PATTERN"/>
<
/File>
<
!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<
RollingFile name="RollingFileInfo" fileName="$FILE_PATH/info.log" filePattern="$FILE_PATH/$FILE_NAME-INFO-%dyyyy-MM-dd_%i.log.gz">
<
!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<
ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<
PatternLayout pattern="$LOG_PATTERN"/>
<
Policies>
<
!--interval属性用来指定多久滚动一次,默认是1 hour-->
<
TimeBasedTriggeringPolicy interval="1"/>
<
SizeBasedTriggeringPolicy size="10MB"/>
<
/Policies>
<
!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<
DefaultRolloverStrategy max="15"/>
<
/RollingFile>
<
!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<
RollingFile name="RollingFileWarn" fileName="$FILE_PATH/warn.log" filePattern="$FILE_PATH/$FILE_NAME-WARN-%dyyyy-MM-dd_%i.log.gz">
<
!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<
ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<
PatternLayout pattern="$LOG_PATTERN"/>
<
Policies>
<
!--interval属性用来指定多久滚动一次,默认是1 hour-->
<
TimeBasedTriggeringPolicy interval="1"/>
<
SizeBasedTriggeringPolicy size="10MB"/>
<
/Policies>
<
!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<
DefaultRolloverStrategy max="15"/>
<
/RollingFile>
<
!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<
RollingFile name="RollingFileError" fileName="$FILE_PATH/error.log" filePattern="$FILE_PATH/$FILE_NAME-ERROR-%dyyyy-MM-dd_%i.log.gz">
<
!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<
ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<
PatternLayout pattern="$LOG_PATTERN"/>
<
Policies>
<
!--interval属性用来指定多久滚动一次,默认是1 hour-->
<
TimeBasedTriggeringPolicy interval="1"/>
<
SizeBasedTriggeringPolicy size="10MB"/>
<
/Policies>
<
!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<
DefaultRolloverStrategy max="15"/>
<
/RollingFile>
<
/appenders>
<
!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
<
!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效-->
<
loggers>
<
!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<
logger name="org.mybatis" level="info" additivity="false">
<
AppenderRef ref="Console"/>
<
/logger>
<
!--监控系统信息-->
<
!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
<
Logger name="org.springframework" level="info" additivity="false">
<
AppenderRef ref="Console"/>
<
/Logger>
<
root level="info">
<
!--定义日志级别,大于等于info级别的日志都将被输出-->
<
appender-ref ref="Console"/>
<
appender-ref ref="Filelog"/>
<
appender-ref ref="RollingFileInfo"/>
<
appender-ref ref="RollingFileWarn"/>
<
appender-ref ref="RollingFileError"/>
<
/root>
<
/loggers>
<
/configuration>
configuration
- status用来指定log4j本身的打印日志的级别.
- monitorInterval 通过monitorInterval这个配置参数可以动态监测配置文件是否修改了,如果修改了,按照最新的配置文件,比如可以动态修改logger的优先级
- property 定义一个变量,如下格式
<
!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<
!-- %logger36 表示 Logger 名字最长36个字符 -->
<
property name="LOG_PATTERN" value="https://www.songbingjia.com/android/%dateHH:mm:ss.SSS [%thread] %-5level %logger36 - %msg%n" />
appenders
- console定义输出到控制台的Appender
//子元素name:指定Appender的名字.
target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT.
PatternLayout:输出格式,不设置默认为:%m%n.
ThresholdFilter: `<
!--控制台只输出level(属性)及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
`
- File用来定义输出到指定位置文件的Appender
- RollingFile 定义超过指定条件日志的删除和新建策略
name:指定Appender的名字.
fileName:指定输出日志的目的文件带全路径的文件名.
PatternLayout:输出格式,不设置默认为:%m%n.
filePattern:指定新建日志文件的名称格式.
Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志,子元素`TimeBasedTriggeringPolicy interval="1" `interval属性用来指定多久滚动一次,默认是1 hour。`SizeBasedTriggeringPolicy size="10MB"`,size属性用来定义每个日志文件的大小。
loggers
- logger用来单独指定日志格式
- Root用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出.
level Root的属性. 日志输出级别共8个,优先级从大到小 OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL 日志级别越高,输出的日志越少 `appender-ref` Root的子节点,用来指定该日志输出到哪个Appender
- GitHub:https://github.com/mifunc/springboot/tree/main/lession11
- Gitee:https://gitee.com/rumenz/springboot/tree/master/lession11
- https://rumenz.com/rumenbiji/springboot-log4j2.html
- 我的博客 https://rumenz.com/ ,
- 我的工具箱 https://tooltt.com/
- 微信公众号:【入门小站】
文章图片
- 关注【入门小站】回复【1001】获取 linux常用命令速查手册
- 关注【入门小站】回复【1003】获取 LeetCode题解【java语言实现】
- 关注【入门小站】回复【1004】获取 Java基础核心总结
- 关注【入门小站】回复【1009】获取 阿里巴巴Java开发手册
推荐阅读
- 老大说(谁要再用double定义商品金额,就自己收拾东西走)
- #过年不停更#HarmonyOS自定义JS组件—灵动的锦鲤
- # yyds干货盘点 # 手把手教你抖音系列视频批量下载器开发
- #yyds干货盘点# Spring 源码三千问同样是AOP代理bean,为什么@Async标记的bean循环依赖时会报错()
- MySQL 数据库SQL 语句的高阶运用
- #yyds干货盘点#nmap(网络探测工具和安全/端口扫描器)
- 矿用防爆LED显示屏(单色,双色,全彩)T:l35-627l-8Oll
- gitlab安装备份与还原
- 马哥N63第六周作业