查看原文
其他

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

SpringForAll社区 SpringForAll社区 2021-05-26


点击上方☝SpringForAll社区,轻松关注!
及时获取有趣有料的技术文章


▶ Log4j2 性能

  • https://logging.apache.org/log4j/2.x/performance.html

▶ Spring Boot 依赖与配置

Maven 依赖

1<!-- web -->
2        <dependency>
3            <groupId>org.springframework.boot</groupId>
4            <artifactId>spring-boot-starter-web</artifactId>
5            <exclusions>
6                <exclusion>
7                    <groupId>org.springframework.boot</groupId>
8                    <artifactId>spring-boot-starter-logging</artifactId>
9                </exclusion>
10            </exclusions>
11        </dependency>
12
13        <!-- 日志 Log4j2 -->
14        <dependency>
15            <groupId>org.springframework.boot</groupId>
16            <artifactId>spring-boot-starter-log4j2</artifactId>
17        </dependency>
18
19        <!-- Log4j2 异步支持 -->
20        <dependency>
21            <groupId>com.lmax</groupId>
22            <artifactId>disruptor</artifactId>
23            <version>3.3.6</version>
24        </dependency>

XML 配置 resources/log4j2.xml

  • 混合 sync/async

  • 彩色日志

  • 分类输出到不同文件

  • 自动压缩日志文件并归档

1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,
3     你会看到log4j2内部各种详细输出。可以设置成OFF(关闭) 或 Error(只输出错误信息)。
4     30s 刷新此配置
5-->

6<configuration status="WARN" monitorInterval="30">
7
8    <!-- 日志文件目录、压缩文件目录、日志格式配置 -->
9    <properties>
10        <Property name="fileName">/Users/admin/Code/log</Property>
11        <Property name="fileGz">/Users/admin/Code/log/7z</Property>
12        <Property name="PID">????</Property>
13        <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>
14    </properties>
15
16    <Appenders>
17        <!-- 输出控制台日志的配置 -->
18        <Console name="console" target="SYSTEM_OUT">
19            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
20            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
21            <!-- 输出日志的格式 -->
22            <PatternLayout pattern="${LOG_PATTERN}"/>
23        </Console>
24
25        <!-- 打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
26        <RollingRandomAccessFile name="infoFile" fileName="${fileName}/web-info.log" immediateFlush="false"
27                                    filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-info.gz">

28            <PatternLayout pattern="${LOG_PATTERN}"/>
29
30            <Policies>
31                <SizeBasedTriggeringPolicy size="20 MB"/>
32            </Policies>
33
34            <Filters>
35                <!-- 只记录info和warn级别信息 -->
36                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
37                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
38            </Filters>
39
40            <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
41            <DefaultRolloverStrategy max="50"/>
42        </RollingRandomAccessFile>
43
44        <!-- 存储所有error信息 -->
45        <RollingRandomAccessFile name="errorFile" fileName="${fileName}/web-error.log" immediateFlush="false"
46                                    filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-error.gz">

47            <PatternLayout pattern="${LOG_PATTERN}"/>
48
49            <Policies>
50                <SizeBasedTriggeringPolicy size="50 MB"/>
51            </Policies>
52
53            <Filters>
54                <!-- 只记录error级别信息 -->
55                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
56            </Filters>
57
58            <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
59            <DefaultRolloverStrategy max="50"/>
60        </RollingRandomAccessFile>
61    </Appenders>
62
63    <!-- Mixed sync/async -->
64    <Loggers>
65        <Root level="debug" includeLocation="true">
66            <AppenderRef ref="console"/>
67            <AppenderRef ref="infoFile"/>
68            <AppenderRef ref="errorFile"/>
69        </Root>
70
71        <AsyncRoot level="debug" includeLocation="true">
72            <AppenderRef ref="console"/>
73            <AppenderRef ref="infoFile"/>
74            <AppenderRef ref="errorFile"/>
75        </AsyncRoot>
76    </Loggers>
77
78</configuration>

最终效果如下:

img

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


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

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

● Spring Boot 异常处理

● Spring Boot 配置 - 配置信息加密

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

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


如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存