up:: SpringBoot电商项目第一次全流程演示

说明:

(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日志组件就配置好了;