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张图片

三 如何在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

SpringBoot集成日志框架教程_第2张图片

详情请查看

3. 自定义输出格式

创建logback-spring.xml文件



    
    
    

    
    
        
            ${PATTERN}
        
    

    
    
        
        ${LOG_HOME}\\all.log
        
        
            
            ${LOG_HOME}\\%d{yyyy-MM-dd}-%i.log
            
            3
            
            
                50MB
            
        

        
        
            ${PATTERN}
        
    

    
    
        
        
    

输出格式如下:

"%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也会触发滚动

你可能感兴趣的:(日志系统,spring,boot,java,logback,log4j)