Springboot工具篇:log4j2集成,配合lombok更好用

对于一个系统来说,日志是很重要的部分,日志可以帮助我们快速查找系统相关异常,可以帮助开发人员调试程序,可以监控系统程序运行情况,日志分为不同的级别(我比较常用的就是debug,info,error,其余的不多赘述,感兴趣的可以上网查一下找各种日志级别)。虽然日志对于我们很重要,但作为开发人员来说还是不想花费太多的代码在日志上面。话不多说,下面我们来看看怎样在springboot项目中集成log4j2以及怎样结合lombok使代码更加简洁。

1. pom.xml文件中添加log4j2和lombok依赖

去掉springboot默认的日志配置:


4055666-3f8d5f4c9134584a.png
image.png

添加maven依赖

     <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          <exclusions>
         <!-- 去掉默认配置 -->
              <exclusion>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-logging</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
<!-- 引入log4j2依赖 -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-log4j2</artifactId>
      </dependency>
      <!--引入lombok依赖-->
      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.18.4</version>
          <scope>provided</scope>
      </dependency>

2. 创建log4j2配置文件

在resources目录下面创建配置文件,文件名为log4j2-spring.xml(注意文件名,这样我们不需要再application.properties文件中添加配置)。
配置文件内容如下(文件中的说明不做过多赘述):

<?xml version="1.0" encoding="UTF-8"?>
<!--设置log4j2的自身log级别为warn-->
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,
    当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="warn" monitorInterval="30">
    <!--先定义所有的appender-->
    <appenders>
        <!--这个输出控制台的配置-->
        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        </console>
        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
        <File name="log" fileName="log/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>
        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,
        则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/hpaasvc/info.log"
                     filePattern="${sys:user.home}/logs/hpaasvc/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
 
        <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/hpaasvc/warn.log"
                     filePattern="${sys:user.home}/logs/hpaasvc/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
 
        <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/hpaasvc/error.log"
                     filePattern="${sys:user.home}/logs/hpaasvc/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="ERROR"/>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
 
    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <!--过滤掉spring和hibernate的一些无用的debug信息-->
        <logger name="org.springframework" level="INFO">
        </logger>
        <logger name="org.mybatis" level="INFO">
        </logger>
        <root level="all">
            <appender-ref ref="Console"/>
            <!--<appender-ref ref="RollingFileInfo"/>-->
            <!--<appender-ref ref="RollingFileWarn"/>-->
            <!--<appender-ref ref="RollingFileError"/>-->
        </root>
    </loggers>
</configuration>

3. 添加lombok插件

点击idea的file-->Settings-->Plugins 再搜索框中输入lombok
安装完成之后重启idea即可

4. 使用log4j2和lombok

现在使用log4j2只需要在相关的类上面添加@Slf4j注解即可(该注解由lombok提供)
具体代码如下:
DemoController.java

package com.example.study3;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping
@RestController
@Slf4j
public class LogController {

    @GetMapping("/getTest")
    public String getTest(){
        log.info("测试方法");
        return "hello,this is zhngxian's demo";
    }

    @GetMapping("/getPerson")
    public PersonDto person() {
        log.info("查询人员信息开始-------");
        PersonDto personDto = new PersonDto();
        personDto.setName("张三丰");
        personDto.setAge(120);
        personDto.setSex("男");
        personDto.setAddress("武当山");
        log.info("查询人员信息结束-------");
        return personDto;
    }
}

PersonDto.java (@Data也是lombok提供的,免去了实体类中getter和setter方法,代码更简洁,编译的时候会自动生成getter和setter方法)

package com.example.demo.controller.dto;
 
import lombok.Data;
 
@Data
public class PersonDto {
    private String name;
    private int age;
    private String sex;
    private String address;
}

启动项目,日志不再是原来的默认格式:

4055666-b5436a171bfa0e09.png
image.png

测试controller中的日志,在浏览器中输入: http://localhost:8080/getPerson
4055666-374bc666f4d4614d.png
image.png

4055666-c6c375becc0013e7.png
image.png

猜你喜欢

转载自blog.csdn.net/weixin_34211761/article/details/90783083