• springboot配置log4j2


    springboot配置log4j2

    部分内容参考:
    log4j2.yml配置的文章,很具体,可参考
    一个log4j.xml配置的文章(可以参考)

    1.引入相关的依赖

    
        org.springframework.boot
        spring-boot-starter
        
            
                org.springframework.boot
                spring-boot-starter-logging
            
        
    
    
    
    
    
        org.springframework.boot
        spring-boot-starter-web
        
            
            
                org.springframework.boot
                spring-boot-starter-logging
            
        
    
    
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    
    
    
    
        org.springframework.boot
        spring-boot-starter-log4j2
    
    
    
        com.fasterxml.jackson.dataformat
        jackson-dataformat-yaml
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    注意
    一定要注意项目中原本的依赖,可能会有冲突,因为使用log4j2依赖一定要排除原本项目中的log4j、logback相关依赖。
    我就在此处一直报错,但是最后也不知道哪里错了。。

    如果一直报错,如下代码所示。就在右侧maven框中,将项目clean再install一下。

    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/C:/Users/Zll/.m2/repository/ch/qos/logback/logback-classic/1.2.6/logback-classic-1.2.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/C:/Users/Zll/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.14.1/log4j-slf4j-impl-2.14.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.配置相应的log4j2.yml及application.yml文件

    log4j2.yml:
    注意log4j2的配置文件中的文件存储地址是由log.path的value值决定的。如果value值没有写具体哪个盘,就默认在当前项目路径中创建
    配置日志路径
    测试后在项目中生成对应的日志

    # 共有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: logs/${project.name}_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: ${log.pattern}
        #   启动日志
        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: ${log.pattern}
            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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147

    application.xml:(注意将原本springboot文件中内置日志的相关配置清除)项目原本配置
    application.xml:

    logging:
      config: classpath:log4j2.yml
    
    • 1
    • 2

    3.编写相应的测试接口

    引入相应包:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    //定义logger:
    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
    
    //在Controller中随便写个测试接口,使用第一种第二种都可
    //第一种,没有定义相应的配置工具类,简单使用
    @GetMapping(value="/test")
    	public String test(){
    		logger.debug("debug ****************************");
    		logger.info("info ****************************");
    		logger.warn("warn ****************************");
    		logger.error("error ****************************");
    		return "success";
    	}
    	
    	//第二种,定义了相应的log枚举类、工具类,具体可参见引用的文章,很具体。
    	@GetMapping("/helloworld")
    	public String helloworld() throws Exception{
    		Logger log = LogUtils.getExceptionLogger();
    		Logger log1 = LogUtils.getBussinessLogger();
    		Logger log2 = LogUtils.getDBLogger();
    		userService.findUsers(0,10,"");
    		log.error("getExceptionLogger===日志测试");
    		log1.info("getBussinessLogger===日志测试");
    		log2.debug("getDBLogger===日志测试");
    		return "helloworld";
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    4.在postman中进行测试即可

    postman
    显示日志
    如图示即可。
    如果觉得代码不完整,参考相应的参考文章(更为具体)

    最后,感觉log4j2配置完以后看不到数据库表调用的SQL语句。(也可能我还没配置到)没有springboot内置的日志好,那个直接改为debug级别就可以显示sql及库表调用的情况。

    # 调试时使用
      Loggers:
        Root:
          level: info
          AppenderRef:
            - ref: CONSOLE
        Logger: #单独设置某些包的输出级别
          - name: com.thzh #复数加上-
            additivity: false #去除重复的log
            level: debug
            AppenderRef:
              - ref: CONSOLE #复数加上-
              - ref: ROLLING_FILE #复数加上-
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    具体为什么这么配置不太清楚,慢慢学习。

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    怎么从三菱PLC FX3U去采集数据?
    input改造文件上传,el-table的改造,点击上传,拖拽上传,多选上传
    (高阶)Redis 7 第12讲 数据双写一致性 经验篇
    AM@有理函数的积分@有理分式积分
    【JavaEE初阶】 UDP协议的详细解析
    mysql load data infile导入数据主键重复怎么解决
    java agent技术的注入利用与避坑点
    JMeter + InfluxDB2
    C进阶-字符串和内存函数
    Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。
  • 原文地址:https://blog.csdn.net/m0_67391401/article/details/126115575