SpringBoot集成日志框架教程

一  门面日志选择

  1. commons-logging,Apache出品的门面日志框架,现在不再使用,了解即可。
  2. Slf4j ,英文全称为“Simple Logging Facade for Java”,为java提供的简单日志Facad(springboot parent已经依赖)

所以门面日志我们直接选择Slf4j就行了

二  实现日志选择

常用的日志实现框架有JUL(Java Util Logging)、log4j、logback、log4j2

性能方面我没有做具体的测试,但是据说

  • logback 比 log4j 功能更加强大,性能更加好;
  • log4j2 与 logback 功能相似,但前者的性能更好

最重要的是SpringBoot 集成了Slf4j + logback ,可能也从另一个侧面表示logback 综合性能表现还是不错的,所以选择Slf4j + logback 不需要额外添加依赖

三 如何在SpringBoot中配置

1. 默认输出格式解释

默认情况下输出以下项目:

2024-01-14T23:15:32.940+08:00  INFO 16512 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9527 (http) with context path '/goods'
2024-01-14T23:15:32.945+08:00  INFO 16512 --- [           main] com.ychen.goods.GoodsApplication         : Started GoodsApplication in 1.197 seconds (process running for 1.404)
2024-01-14T23:15:36.678+08:00  INFO 16512 --- [nio-9527-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/goods]  : Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-01-14T23:15:36.678+08:00  INFO 16512 --- [nio-9527-exec-2] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2024-01-14T23:15:36.679+08:00  INFO 16512 --- [nio-9527-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
2024-01-14T23:15:36.712+08:00  INFO 16512 --- [nio-9527-exec-2] c.y.goods.controllers.GoodsController    : visit count: 1

  • 日期和时间:毫秒精度且易于排序

  • 日志级别:ERRORWARNINFODEBUG、 或TRACE

  • 进程 ID

  • ---用于区分实际日志消息开始的分隔符

  • 线程名称:用方括号括起来(可能会被截断以用于控制台输出)

  • 相关 ID:如果启用跟踪(上面的示例中未显示)

  • 记录器名称:这通常是源类名称(通常是缩写)

  • 消息内容

2. 创建logback-spring.xml文件

Spring的加载顺序:logback.xml --> application.properties --> logback-spring.xml
注意:日志系统是在Spring上下文之前创建的,因此不能使用@PropertySource配置,建议使用 logback-spring.xml

详情请查看

3. 自定义输出格式

创建logback-spring.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 设置日志输出格式 -->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} | %X{trace_uuid} | %level | %thread | %c:%L | %msg%n"/>
    <property name="LOG_HOME" value="D:\\temp\\log"/>

    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
    <appender name="AppLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 指定日志文件的名称 -->
        <file>${LOG_HOME}\\all.log</file>
        <!--
        当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名
        TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--
            滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动
            %i:当文件大小超过maxFileSize时,按照i进行文件滚动
            -->
            <fileNamePattern>${LOG_HOME}\\%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!-- 控制保留的归档文件的最大数量,超出数量就删除旧文件。 -->
            <MaxHistory>3</MaxHistory>
            <!--
            当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动 注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy
            -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>50MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- 日志输出格式: -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${PATTERN}</pattern>
        </layout>
    </appender>

    <!-- 设置root logger -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="AppLogAppender" />
    </root>
</configuration>

输出格式如下:

"%d{yyyy-MM-dd HH:mm:ss.SSS} | %X{trace_uuid} | %level | %thread | %c:%L | %msg%n"

注意:%X{trace_uuid} 需要在日志输出前加入以下代码(后面会详细说明如何在SpringBoot项目加入trace_uuid 并实现应用调用过程的传递

import org.slf4j.MDC;

MDC.put("trace_uuid", UUID.randomUUID().toString().replace("-", ""));

输出样例如下:

2024-01-15 00:06:55.160 | bd7e43339a08414b93012bdaf640e844 | INFO | http-nio-9527-exec-2 | com.ychen.goods.controllers.GoodsController:30 | visit count: 1
2024-01-15 00:09:50.755 | b84fdd8fb4b5465fad4a504d2db194d9 | INFO | http-nio-9527-exec-5 | com.ychen.goods.controllers.GoodsController:30 | visit count: 2
2024-01-15 00:09:51.426 | 2676e9c0214c45a59f5321253d94c550 | INFO | http-nio-9527-exec-6 | com.ychen.goods.controllers.GoodsController:30 | visit count: 3

RollingFileAppender 配置了滚动输出,当日期滚动后会出现滚动,另外当文件大小大于maxFileSize也会触发滚动

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值