Springboot集成Log4j2日志系统

一、maven依赖

主要的依赖:

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <!-- logging里有logback需要排除logback-->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 加上这个才能辨认到log4j2.yml文件 -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
        </dependency>

        <!-- 采用log4j2 日志-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

网上其他的教程是在spring-boot-starter-web中排除spring-boot-starter-logging,就像这样:

<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> 

我测试的时候发现在spring-boot-starter-web排除没有用,查看了依赖项后发现是spring-boot-starter中的spring-boot-starter-logging含有logback导致的,所以在spring-boot-starter中排除spring-boot-starter-logging。

二、配置文件

1.日志文件的配置:
在resources下新建文件夹log4j2,文件夹下新建log4j2.yml文件。
在这里插入图片描述
log4j2.yml:

# 共有8个级别,按照从低到高为:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。
Configuration:
  status: warn
  monitorInterval: 30
  Properties: # 定义全局变量
    Property: # 缺省配置(用于开发环境)。其他环境需要在VM参数中指定,如下:
      #测试:-Dlog.level.console=warn -Dlog.level.xjj=trace
      #生产:-Dlog.level.console=warn -Dlog.level.xjj=info
      - name: log.level.console
        value: info
      - name: log.path
        value: log
      - name: project.name
        value: opendoc
      - name: log.pattern
        value: "%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-30.30C{1.} : %m%n"
  Appenders:
    Console:  #输出到控制台
      name: CONSOLE
      target: SYSTEM_OUT
      PatternLayout:
        pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n"
    #   启动日志
    RollingFile:
      - name: ROLLING_FILE
        fileName: ${
    
    log.path}/${
    
    project.name}.log
        filePattern: "${log.path}/historyRunLog/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n"
        Filters:
          #        一定要先去除不接受的日志级别,然后获取需要接受的日志级别
          ThresholdFilter:
            - level: error
              onMatch: DENY
              onMismatch: NEUTRAL
            - level: info
              onMatch: ACCEPT
              onMismatch: DENY
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多100个
          max: 100
      #   平台日志
      - name: PLATFORM_ROLLING_FILE
        ignoreExceptions: false
        fileName: ${
    
    log.path}/platform/${
    
    project.name}_platform.log
        filePattern: "${log.path}/platform/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          pattern: ${
    
    log.pattern}
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多100个
          max: 100
      #   业务日志
      - name: BUSSINESS_ROLLING_FILE
        ignoreExceptions: false
        fileName: ${
    
    log.path}/bussiness/${
    
    project.name}_bussiness.log
        filePattern: "${log.path}/bussiness/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          pattern: ${
    
    log.pattern}
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多100个
          max: 100
      #   错误日志
      - name: EXCEPTION_ROLLING_FILE
        ignoreExceptions: false
        fileName: ${
    
    log.path}/exception/${
    
    project.name}_exception.log
        filePattern: "${log.path}/exception/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        ThresholdFilter:
          level: error
          onMatch: ACCEPT
          onMismatch: DENY
        PatternLayout:
          pattern: ${
    
    log.pattern}
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多100个
          max: 100
      #   DB 日志
      - name: DB_ROLLING_FILE
        ignoreExceptions: false
        fileName: ${
    
    log.path}/db/${
    
    project.name}_db.log
        filePattern: "${log.path}/db/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          pattern: ${
    
    log.pattern}
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多100个
          max: 100
  Loggers:
    Root:
      level: info
      AppenderRef:
        - ref: CONSOLE
        - ref: ROLLING_FILE
        - ref: EXCEPTION_ROLLING_FILE
    Logger:
      - name: platform
        level: info
        additivity: false
        AppenderRef:
          - ref: CONSOLE
          - ref: PLATFORM_ROLLING_FILE
      - name: bussiness
        level: info
        additivity: false
        AppenderRef:
          - ref: BUSSINESS_ROLLING_FILE
      - name: exception
        level: debug
        additivity: true
        AppenderRef:
          - ref: EXCEPTION_ROLLING_FILE
      - name: db
        level: info
        additivity: false
        AppenderRef:
          - ref: DB_ROLLING_FILE
#    监听具体包下面的日志
#    Logger: # 为com.xjj包配置特殊的Log级别,方便调试
#      - name: com.xjj
#        additivity: false
#        level: ${sys:log.level.xjj}
#        AppenderRef:
#          - ref: CONSOLE
#          - ref: ROLLING_FILE

注意:
(1)第22行的本地控制台输出和29行的日志文件pattern后面要配置成

"%d{
    
    yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n"

这样当本地启动或者输出到日志文件里的日志就会输出具体的时间日期,文件名,行数等具体信息,以后代码报错就方便根据报错信息排查,就像这样:
在这里插入图片描述
(2)根据26行的fileName和11-14行来配置日志文件的所在目录和日志文件名称,上面的配置会在jar包所在目录创建一个log文件夹,其中产生的日志文件就叫做opendoc.log

2.项目的启动配置文件配置
在项目的application.yml增加log4j2.yml文件的路径,如下:

logging:
  config: classpath:log4j2/log4j2.yml

三、测试

测试类:

package com.springboot.demo.test.userController;

import com.springboot.demo.test.dao.Userdao;
import com.springboot.demo.test.model.TestModel;
import com.springboot.demo.test.model.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping(value = "/query")
@Api(value  = "查询相关的")
public class Usercontroller {
    
    
    private static final Logger logger = LoggerFactory.getLogger(Usercontroller.class);

    @Autowired
    Userdao userdao;
    
    @ApiOperation("列表查询")
    @GetMapping(value = "/v1/findAll")
    public List<User> query(@ApiParam(value = "学生id" , required=true ,example = "1") @RequestParam Integer id) {
    
    
        logger.info("id是:{}",id);
        return userdao.findAll();
    }

    @ApiOperation("测试")
    @PostMapping(value = "/v1/test")
    public List<User> query(@ApiParam(value = "入参JSON") @RequestBody TestModel testModel ) {
    
    
        return userdao.findAll();
    }
}

在这里插入图片描述

参考:
Spring Boot采用yml的方式配置 Log4j2 日志文件
Springboot整合log4j2日志全解
spring boot + slf4j + log4j配置

猜你喜欢

转载自blog.csdn.net/qq_33697094/article/details/110493994
今日推荐