Log4j2+slf4j log system configuration and use

1. Official website address: https://logging.apache.org/log4j/2.x/manual/configuration.html#Loggers

2. Add dependencies (must remove logback)

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <!-- 排除掉logging,不使用logback,改用log4j2 -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
                <exclusion><!-- 去掉默认的logback日志配置 -->
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
<!--        log4j-slf适配器-->
<!--        log4j-slf4j-impl已经依赖了slf4j-api和log4j-core-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </dependency>
        <!-- 加上这个才能辨认到log4j2.yml文件 -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
        </dependency>

And add configuration items in application.yml, indicating the storage address of the log4j2 configuration file

logging:
  config: classpath:config/log4j2.yml

Three, log4j2 configuration file writing

Configuration:
  # eigth levels:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
#  status:这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
  status: WARN
#  每隔多少秒扫描配置文件、应用配置文件的最新修改
  monitorInterval: 5
#  变量
  Properties:
    Property:
      - name: PATTERN1
#        [%-5p] 输出等级,长度不足5时右侧补齐空格
        value: "%d{yyyy-MM-dd HH:mm:ss}  %style{[%-5p]}{cyan}  %highlight{%c{1.}} : %m%n "
      - name: PATTERN2
        value: UTF-8
      - name: LOG_PATH
        value: logs
      - name: LOG_NAME
        value: log4j
#  输出目标(比如控制台,文件)
  Appenders:
    Console:
      name: Console
      target: SYSTEM_OUT
      PatternLayout:
        pattern: ${PATTERN1}
        charset: ${PATTERN2}
#        是否禁止使用彩色,默认是true
        disableAnsi: false
#        过滤,NEUTRAL代表中立,传递个下一个过滤器
#      Filters:
#        ThresholdFilter:
#          level: ERROR
#          onMatch: DENY
#          onMismatch: ACCEPT
#        LevelRangeFilter:
#          minLevel: ERROR
#          maxLevel: DEBUG
#          onMatch: DENY
#          onMismatch: ACCEPT
    File:
      name: File
      fileName: ${LOG_PATH}/${LOG_NAME}_rolling.log
      PatternLayout:
        pattern: ${PATTERN1}
        charset: ${PATTERN2}
        disableAnsi: false
    RollingFile:
      name: RollingFile
#      %i  同一分钟文件达到规定大小,积累出新文件
      filePattern: "${LOG_PATH}/%d{yyyy-MM-dd-HH-mm}_%i.log.gz"
      fileName: ${LOG_PATH}/${LOG_NAME}.log
      PatternLayout:
        pattern: ${PATTERN1}
        charset: ${PATTERN2}
        disableAnsi: false
      Policies:
        #        基于时间的滚动策略,时间单位取决于filePattern的最小时间单位
        TimeBasedTriggeringPolicy:
          interval: 2
        #        基于文件大小的滚动策略
        SizeBasedTriggeringPolicy:
          size: 1MB
#      设置%i的最大值,默认值是7,文件数量达到最大值就会删除旧的日志
      DefaultRolloverStrategy:
        max: 10
#    异步输出
    Async:
      name: Async
      AppenderRef:
        ref: Console

  Loggers:
    Root:
      level: WARN
      AppenderRef:
        - ref: Console
        - ref: File
        - ref: RollingFile
#    Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等
#    additivity="false"为不继承父log的Appender
#    Logger
#      - name: xwl
#        level: WARN
#        additivity: false
#        AppenderRef: Console

Pattern configuration explanation: https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout

Fourth, use in the code

Using the @Slf4j annotation, use the following code to call

log.error("ERROR_错误");
log.warn("WARN_警告");

Guess you like

Origin blog.csdn.net/qq_33235279/article/details/129438931