SpringBoot集成Log4j.yml

以Yml格式作为SpringBoot的日志,并分目录显示不同级别,不同日期不同打包

添加依赖

SpringBoot的默认日志为Logback,需要先去除默认日志

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
		<exclusions>
			<!--去掉默认日志,加载别的日志 , 切换log4j2日志读取  -->
			<exclusion>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-logging</artifactId>
			</exclusion>
		</exclusions>
</dependency>

SpringBoot添加Log4j依赖

<!-- 配置 log4j2 -->
<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

创建log4j.yml文件

# 共有8个级别,按照从低到高为:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。
Configuration:
  status: warn
  monitorInterval: 30
  Properties: # 定义全局变量
    Property: # 缺省配置(用于开发环境)。其他环境需要在VM参数中指定,如下:
      - name: log.level.console
        value: info
      - name: log.path
        value: "E:/logs/${project.name}_log" #这里是配置日志文件输出的路径,如果不配置则在当前项目根目录下创建日志文件
      - name: project.name
        value: oa_basics #配置名称
      - 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: warn #warn级别,不区分大小写
              onMatch: DENY #表示不匹配该级别及以上
              onMismatch: NEUTRAL #表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
            - level: error
              onMatch: DENY #表示不匹配该级别及以上
              onMismatch: NEUTRAL #表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多31个
          max: 31
      #   info 日志
      - name: INFO_ROLLING_FILE
        ignoreExceptions: false
        fileName: ${log.path}/info/${project.name}_info.log #配置文件info级别的日志名称
        filePattern: "${log.path}/info/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz" #打包名称
        Filters:
          #一定要先去除不接受的日志级别,然后获取需要接受的日志级别
          #一定,一定要去掉warn级别,要不然会打印 info级别+warn级别, 很坑
          ThresholdFilter:
            - level: warn
              onMatch: DENY #表示不匹配该级别及以上
              onMismatch: NEUTRAL #表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
            - level: info
              onMatch: ACCEPT #表示匹配该级别及以上
              onMismatch: DENY #表示不匹配该级别以下的
        PatternLayout:
          pattern: ${log.pattern}
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多31个
          max: 31
          DELETE:
      #   错误日志
      - name: ERROR_ROLLING_FILE
        ignoreExceptions: false
        fileName: ${log.path}/error/${project.name}_error.log
        filePattern: "${log.path}/error/$${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:     # 文件最多31个
          max: 31
      #   warn 日志
      - name: WARN_ROLLING_FILE
        ignoreExceptions: false
        fileName: ${log.path}/warn/${project.name}_warn.log
        filePattern: "${log.path}/warn/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        Filters:
          #一定要先去除不接受的日志级别,然后获取需要接受的日志级别
          #一定,一定要去掉error级别,要不然会打印 error级别+warn级别, 很坑
          ThresholdFilter:
            - level: ERROR
              onMatch: DENY #表示不匹配该级别及以上
              onMismatch: NEUTRAL #表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
            - level: warn
              onMatch: ACCEPT
              onMismatch: DENY
        PatternLayout:
          pattern: ${log.pattern}
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多31个
          max: 31
  Loggers:
    Root:
      level: info
      AppenderRef:
        - ref: CONSOLE
        - ref: ROLLING_FILE #加载运行日志
        - ref: WARN_ROLLING_FILE  #加载warn日志
        - ref: ERROR_ROLLING_FILE #加载error日志
        - ref: INFO_ROLLING_FILE  #加载info日志
    Logger:
      - name: info
        level: info
        additivity: true
        AppenderRef:
          - ref: INFO_ROLLING_FILE
      - name: error
        level: error
        additivity: false #若是additivity设为true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出
        AppenderRef:
          - ref: ERROR_ROLLING_FILE
      - name: warn
        level: warn
        additivity: false
        AppenderRef:
          - ref: WARN_ROLLING_FILE

日志注意事项

日志级别
日志级别,转载于https://blog.csdn.net/shiyong1949/article/details/52643711
共有8个级别,按照从低到高为:
ALL < TRACE < DEBUG < INFO < WARN < ERROR

ALL 最低等级的,用于打开所有日志记录。

TRACE 很低的日志级别,一般不会使用。

DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。

INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。

WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。

ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。

FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。

OFF 最高等级的,用于关闭所有日志记录
onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL
属性值,转载于https://blog.csdn.net/yh_zeng2/article/details/82227142

  1. onMatch=“ACCEPT” 表示匹配该级别及以上
  2. onMatch=“DENY” 表示不匹配该级别及以上
  3. onMatch=“NEUTRAL” 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上
  4. onMismatch=“ACCEPT” 表示匹配该级别以下
  5. onMismatch=“DENY” 表示不匹配该级别以下的
  6. onMismatch=“NEUTRAL” 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下

在application.yml中引入log4j.yml

引入

#注意引入文件名千万不要写错!!!
logging:
  config: classpath:log4j2.yml

测试结果

日志目录
日志打包
在这里插入图片描述
在这里插入图片描述
日志输出不同级别不同目录
info级别
在这里插入图片描述
warn级别
在这里插入图片描述
error级别
在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值