热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SpringBoot日志框架如何使用

这篇文章主要介绍了SpringBoot日志框架如何使用,帮助大家更好的理解和使用springboot日志框架,感兴趣的朋友可以了解下

不管是开发过程中调试还是线上问题的定位追踪,日志都发挥着及其重要的作用。平时,我们会用System.out.println()打印一些信息到控制台,我们可以使用该语句输出日志,但是System.out会增加资源的消耗,所以最好使用日志框架打印日志信息。

Java中的日志框架有JCL、Jboss-logging、slf4j、logback、log4j、log4j2等等,其中JCL、Jboss-logging、slf4j属于日志门面(日志的抽象),logback、log4j、log4j2是日志框架的具体实现。阿里巴巴开发规范强制要求使用日志的门面而不要直接使用日志系统的API。

【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架(SLF4J、JCL--Jakarta Commons Logging)中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。

日志门面不是日志解决方案,它只服务于各种各样的日志系统,这就允许最终用户在部署应用时可以随意使用其所希望的日志系统。也就是说如果开始使用slf4j+logback记录日志,则项目会按logback的风格打印日志,后期如果我们想更改为log4j风格的输出,则只需将logback替换为log4j即可,不需改变项目中的任何代码。

slf4j+logback也是SpringBoot中默认整合的日志框架。

如何使用

public class LoggerService {
  private static final Logger logger = LoggerFactory.getLogger(LoggerService.class);

  public void printLog() {
      logger.trace("trace日志……");
      logger.debug("debug日志……");
      logger.info("info日志……");
      logger.warn("warn日志……");
      logger.error("error日志……");
  }
}

使用LoggerFactory生成Logger对象,然后调用Logger对象的相应日志级别的方法打印即可。另外,在输出日志时,字符串的拼接要使用占位符替换不要使用append等方法。

【强制】在日志输出时,字符串变量之间的拼接使用占位符的方式。说明:因为 String 字符串的拼接会使用 StringBuilder 的 append()方式,有一定的性能损耗。使用占位符仅是替换动作,可以有效提升性能。正例:logger.debug("Processing trade with id: {} and symbol: {}", id, symbol);

上述代码的运行效果:

2020-12-28 13:32:40.751 INFO 16016 --- [nio-8080-exec-2] c.c.e.e.service.LoggerService           : info日志……
2020-12-28 13:32:40.751 WARN 16016 --- [nio-8080-exec-2] c.c.e.e.service.LoggerService           : warn日志……
2020-12-28 13:32:40.751 ERROR 16016 --- [nio-8080-exec-2] c.c.e.e.service.LoggerService           : error日志……

从运行效果可以看出,SpringBoot默认的日志级别(trace

指定配置

SpringBoot日志的默认配置在org\springframework\boot\spring-boot\2.4.1\spring-boot-2.4.1.jar!\org\springframework\boot\logging\logback\defaults.xml文件中,内容如下:

<&#63;xml version="1.0" encoding="UTF-8"&#63;>




  
  
  

  
  
  
  

  
  
  
  
  
  
  
  

里面定义了默认的日志输出格式, org\springframework\boot\spring-boot\2.4.1\spring-boot-2.4.1.jar!\org\springframework\boot\logging\logback\base.xml 文件中定义了日志默认级别。如果想要使用自定义的配置,在类路径下放上日志框架自己对应的配置文件即可,如logback对应logback-spring.xml或logback.xml,log4j2对应log4j2-spring.xml或log4j2.xml,这样Springboot便不在使用默认配置。

SpringBoot 官方建议在日志配置中使用 -spring 的配置方式(例如,使用 logback-spring.xml 而不是 logback.xml)。如果使用标准配置位置,Spring 无法完全控制日志初始化。

另外官方文档中有明确提到,JUL(ava Util Logging) 在 FATJAR 场景下存在一些已知的类加载问题,所以要尽量避免在 FATJAR 场景下使用 JUL。

使用这种命名方式日志框架就不会直接加载日志的配置,而改由SpringBoot加载,同时使用SpringBoot的高级Profile功能指定某段配置只在某个环境下生效。


 



 

示例

  
 
 
 
  %d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level    %logger{50} - %msg%n   
      
  

logback配置详解

logback完整配置如下

<&#63;xml version="1.0" encoding="UTF-8"&#63;>
  







  
    
    ${LOG_PATTERN}
    




  
    
    ${LOG_HOME}/XXX.log.%d{yyyy-MM-dd}.log
    
    15
  
  
    
    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
  
  
  
  10MB
  










  
  


更换日志框架

SpringBoot中的日志实现默认是logback,假如我们要更换其他日志实现,假如要更换为Log4j2,该怎么做呢?

    
    org.springframework.boot    
    spring-boot-starter-web    
    
       
         
         org.springframework.boot
         spring-boot-starter-logging        
           
    
  


    
    org.springframework.boot    
    spring-boot-starter-log4j2

总结一下就是分为两步:

移除原日志的实现,根据新使用的日志实现不同需移除的项目也有所不同,如要使用log4j则需移除以下依赖。


    org.springframework.boot
    spring-boot-starter-web
    
       
         logback-classic
         ch.qos.logback
       
       
         log4j-over-slf4j
         org.slf4j
       
    

引入新实现的依赖。

log4j需引入,这是一个适配层的包,其自动依赖了log4j。


    org.slf4j
    slf4j-log4j12

log4j2需引入。

    
    org.springframework.boot    
    spring-boot-starter-log4j2

以上就是SpringBoot日志框架如何使用的详细内容,更多关于SpringBoot日志框架的资料请关注其它相关文章!


推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • 本文详细介绍了Linux操作系统中的cp和scp命令,包括它们的基本使用方法、常见选项以及如何通过scp命令安全地在不同主机之间传输文件。 ... [详细]
  • 本文将详细介绍如何安装和使用 CactiEZ 的中文版本,帮助那些对英文界面不太熟悉的用户轻松掌握这一强大的网络监控工具。 ... [详细]
  • CentOS 7.2 配置防火墙端口开放
    本文介绍如何在 CentOS 7.2 系统上配置防火墙以开放特定的服务端口,包括 FTP 服务的临时与永久开放方法,以及如何验证配置是否生效。 ... [详细]
  • Eclipse 中 JSP 开发环境配置指南
    本文详细介绍了如何在 Eclipse 集成开发环境中配置 JSP 运行环境,包括必要的软件下载、Tomcat 服务器的配置以及常见问题的解决方法。 ... [详细]
  • 本文探讨了如何利用SqlDependency执行复杂的SQL查询,并确保在多线程环境下的安全性与效率。 ... [详细]
  • WinSCP: 跨Windows与Linux系统的高效文件传输解决方案
    本文详细介绍了一款名为WinSCP的开源图形化SFTP客户端,该工具支持SSH协议,适用于Windows操作系统,能够实现与Linux系统之间的文件传输。对于从事嵌入式开发的技术人员来说,掌握WinSCP的使用方法将极大提高工作效率。 ... [详细]
  • 利用SSH隧道实现外网对局域网机器的安全访问
    本文探讨了一种常见的网络配置问题及其解决方案,即如何在外网环境下安全地访问位于局域网内的计算机。特别介绍了使用SSH反向隧道技术来实现这一目标的具体步骤和注意事项。 ... [详细]
  • PHP 中 preg_match 函数的 isU 修饰符详解
    本文详细解析 PHP 中 preg_match 函数中 isU 修饰符的具体含义及其应用场景,帮助开发者更好地理解和使用正则表达式。 ... [详细]
  • 本文介绍了Java语言开发的远程教学系统,包括源代码、MySQL数据库配置以及相关文档,适用于计算机专业的毕业设计。系统支持远程调试,采用B/S架构,适合现代教育需求。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • Linux环境下Git安装及常见问题解析
    本文详细介绍了在Ubuntu系统中安装Git的过程,包括环境检查、软件安装、用户配置以及SSH密钥生成等步骤,并针对安装过程中可能出现的问题提供了有效的解决方案。 ... [详细]
  • Java EE CDI:解决依赖关系冲突的实例
    在本教程中,我们将探讨如何在Java EE的CDI(上下文和依赖注入)框架中有效解决依赖关系的冲突问题。通过学习如何使用限定符,您将能够为应用程序的不同客户端提供多种接口实现,并确保每个客户端都能正确调用其所需的实现。 ... [详细]
author-avatar
a403441305
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有