Spring Boot 日志处理你还在用Logback?

img

▶ Log4j2 性能

▶ Spring Boot 依赖与配置

Maven 依赖

<!-- web -->          <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>            <!-- Log4j2 异步支持 -->          <dependency>              <groupId>com.lmax</groupId>              <artifactId>disruptor</artifactId>              <version>3.3.6</version>          </dependency>

XML 配置 resources/log4j2.xml

  • 混合 sync/async
  • 彩色日志
  • 分类输出到不同文件
  • 自动压缩日志文件并归档
<?xml version="1.0" encoding="UTF-8"?>  <!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,       你会看到log4j2内部各种详细输出。可以设置成OFF(关闭) 或 Error(只输出错误信息)。       30s 刷新此配置  -->  <configuration status="WARN" monitorInterval="30">        <!-- 日志文件目录、压缩文件目录、日志格式配置 -->      <properties>          <Property name="fileName">/Users/admin/Code/log</Property>          <Property name="fileGz">/Users/admin/Code/log/7z</Property>          <Property name="PID">????</Property>          <Property name="LOG_PATTERN">%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx</Property>      </properties>        <Appenders>          <!-- 输出控制台日志的配置 -->          <Console name="console" target="SYSTEM_OUT">              <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->              <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>              <!-- 输出日志的格式 -->              <PatternLayout pattern="${LOG_PATTERN}"/>          </Console>            <!-- 打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->          <RollingRandomAccessFile name="infoFile" fileName="${fileName}/web-info.log" immediateFlush="false"                                      filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-info.gz">              <PatternLayout pattern="${LOG_PATTERN}"/>                <Policies>                  <SizeBasedTriggeringPolicy size="20 MB"/>              </Policies>                <Filters>                  <!-- 只记录info和warn级别信息 -->                  <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>                  <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>              </Filters>                <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->              <DefaultRolloverStrategy max="50"/>          </RollingRandomAccessFile>            <!-- 存储所有error信息 -->          <RollingRandomAccessFile name="errorFile" fileName="${fileName}/web-error.log" immediateFlush="false"                                      filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-error.gz">              <PatternLayout pattern="${LOG_PATTERN}"/>                <Policies>                  <SizeBasedTriggeringPolicy size="50 MB"/>              </Policies>                <Filters>                  <!-- 只记录error级别信息 -->                  <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>              </Filters>                <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->              <DefaultRolloverStrategy max="50"/>          </RollingRandomAccessFile>      </Appenders>        <!-- Mixed sync/async -->      <Loggers>          <Root level="debug" includeLocation="true">              <AppenderRef ref="console"/>              <AppenderRef ref="infoFile"/>              <AppenderRef ref="errorFile"/>          </Root>            <AsyncRoot level="debug" includeLocation="true">              <AppenderRef ref="console"/>              <AppenderRef ref="infoFile"/>              <AppenderRef ref="errorFile"/>          </AsyncRoot>      </Loggers>    </configuration>

最终效果如下:

img

© 著作权归作者所有,转载或内容合作请联系作者

问题来了,请问诸位你们项目中目前在使用Logback还是Log4j2呢?

img

【双11狂欢的背后】微服务注册中心如何承载大型系统的千万级访问?

Spring Boot 新一代监控你该这么玩

Spring Boot 异常处理

Spring Boot 配置 – 配置信息加密

拒绝黑盒应用-Spring Boot 应用可视化监控

并发Bug之源有三,请睁大眼睛看清它们

本文由博客一文多发平台 OpenWrite 发布!