说明:
(1) 本篇博客主要内容:引入log4j2日志组件并配置;
(2) 关于日志,前面介绍过logback日志组件:如有需要可以依次参考;
●【SLF4j和Logback】:第一次引入SLF4日志门面、logback日志实现;(也知道了Mybatis框架中,可以很好的使用logback日志组件)
●【【logger.error()】介绍;(只是将日志打印在Console控制台)】:介绍了logger.error()方法的几种重构形式;
●【Spring编程式事务)】:知道引入logback后,Spring框架就可以默认使用logback来输出日志(此时,还是向控制台输出日志);
●【引入logback日志组件】中接触到了,把日志信息存储到本地的日志文件中;
● 【整合单元测试与日志】(SSM项目整合logback)
1.日志回顾与log4j2日志简介;
● error 一定是发生错误了;比如排除异常时(这是个error级别的错误),那么我们就可以同时打印出error日志;或者连接不上数据库时,也应该打印出error日志;一旦发生了error时,就意味着需要人为介入去排查错误、修复错误的;
● warn 警告日志,一般用的不多;
● info 日志用的比较多;info日志的作用是,留下一些在现在看起来无关痛痒的记录;在将来如果发生了线上问题,当我们去排查线上问题时,那些预埋的info日志可以帮我们;(比如用户的请求和返回信息,就属于info级别)
● debug 日志用的也比较多;我们在程序开发时,debug日志可以帮助我们调试程序;比如,有时我们需要打印一下某个方法的执行时间,而这些信息是不需要以info的级别去记录的(因为那样的话,会引入过多的无用信息),而是使用debug级别去记录这种与开发相关的内容;
● trace 记录的是如针对于某一个变量或者某一段代码进行的临时性的打印;即trace记录的都是一些非常多的、更加繁杂的信息;;;这些信息对于我们来说,不是很有用;;;(更关注trace日志的,是那些框架开发者等)
2. 首先,要排除logback依赖;
● 我们在创建Spring Boot项目的时候,通过【spring-boot-starter-parent】;其就会,自动引入logback这个日志组件;
● 为了要使用log4j2这个日志组件,我们首先要排除logback这个日志组件,否则不同的日志组件会产生冲突;
在spring-boot-starter-web依赖出,设置去排除logback依赖;
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
设置内容说明:
3.然后,引入log4j2日志组件的依赖;
<!--log4j2日志依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
这是因为,点击【spring-boot-starter-log4j2】,可以看到Spring Boot有对应的版本设置;
4.然后,在resources目录下创建log4j2.xml配置文件,来配置log4j2日志组件;
log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="fatal">
<Properties>
<!-- <Property name="baseDir" value="${sys:user.home}/logs"/>-->
<Property name="baseDir" value="E:/logs/mallLog"/>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="info" onMatch="ACCEPT"
onMismatch="DENY"/>
<PatternLayout
pattern="[%d{MM:dd HH:mm:ss.SSS}] [%level] [%logger{36}] - %msg%n"/>
</Console>
<!--debug级别日志文件输出-->
<RollingFile name="debug_appender" fileName="${baseDir}/debug.log"
filePattern="${baseDir}/debug_%i.log.%d{yyyy-MM-dd}">
<!-- 过滤器 -->
<Filters>
<!-- 限制日志级别在debug及以上在info以下 -->
<ThresholdFilter level="debug"/>
<ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<!-- 日志格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<!-- 策略 -->
<Policies>
<!-- 每隔一天转存 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 文件大小 -->
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<!-- info级别日志文件输出 -->
<RollingFile name="info_appender" fileName="${baseDir}/info.log"
filePattern="${baseDir}/info_%i.log.%d{yyyy-MM-dd}">
<!-- 过滤器 -->
<Filters>
<!-- 限制日志级别在info及以上在error以下 -->
<ThresholdFilter level="info"/>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<!-- 日志格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<!-- 策略 -->
<Policies>
<!-- 每隔一天转存 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 文件大小 -->
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<!-- error级别日志文件输出 -->
<RollingFile name="error_appender" fileName="${baseDir}/error.log"
filePattern="${baseDir}/error_%i.log.%d{yyyy-MM-dd}">
<!-- 过滤器 -->
<Filters>
<!-- 限制日志级别在error及以上 -->
<ThresholdFilter level="error"/>
</Filters>
<!-- 日志格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<!-- 每隔一天转存 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 文件大小 -->
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="debug_appender"/>
<AppenderRef ref="info_appender"/>
<AppenderRef ref="error_appender"/>
</Root>
</Loggers>
</Configuration>
说明:
(1) 日志存储到本地文件,设置日志存储地址;
● 我们把项目部署到服务器上后,需要有一个特定的文件夹来存放日志文件;【name=“baseDir”】这个自定义目录,对于不同的计算机来说,是不一样的;如果我们的系统是Linux或者Mac系统,那么后面的value就可以设置为【value=”${sys:user.home}/logs”】;【value=”${sys:user.home}/logs”】文件夹需要我们自己手动去建立;
● 对于Linux或者Mac系统来说,这个地址就会对应到自己用户所在的目录;
● 由于自己目前开发时使用的是Windows操作系统;;;而Windows系统的文件描述和Linux系统是不一样的;所以,自己这儿改成了【value=“E:/logs/mallLog”】对应了在自己Windows系统上创建的一个文件夹,以在自己的Windows系统上开发时,也能存储日志;
(2.1) 设置控制台打印日志时,日志的配置项;
(2.2) 设置日志存储到日志文件时,日志的配置项;
声明:除了向控制台打印日志外,我们也需要把日志信息存储到日志文件中;同时,因为我们这儿只把【debug,info,error】级别的日志存储到日志文件中;所以,这儿只配置了【debug,info,error】这三个级别;
(3) 最后,把上面定义的日志配置项,给声明出来;
(4) 补充说明(2022.2.16):日志的滚动存放机制;
关于这点的具体内容,在【补充Log4j2日志文件RollingFile的文件滚动更新机制】中有详细介绍;如有需要,可以去参考;
至此,log4j2日志组件就配置好了;