SpringBoot日志的使用解读

 更新时间:2025年02月18日 10:54:55   作者:Exill  
本文主要介绍了SpringBoot中日志的使用方法,包括默认输出格式、使用Lombok简化日志代码、通过yml和xml配置日志等

SpringBoot默认使用SLF4J作为日志门面(相当于接口),Logback作为日志实现(实现可切换)

一.默认输出格式

1.日期时间

2.日志级别(从上至下级别越来越高):

  • TRACE:追踪框架流程日志,一般不使用
  • DEBUG:调试日志
  • INFO:关键、感兴趣日志
  • WARN:警告日志
  • ERROR:错误日志

3.进程ID

4.---:消息分隔符

5.线程名:用[]包裹

6.Logger名:产生这条日志的类名

7.消息:具体日志内容

二.使用

@Service
public class UserService{//创建UserService类对应的Logger(SLF4J包下)
    private Logger logger= LoggerFactory.getLogger(getClass());
    public void useLogger() {//使用                
        Loggerlogger.trace("TRACE");
        logger.debug("DEBUG");
        logger.info("INFO {} {}", "参1", "参2");
        logger.warn("WARN");
        logger.error("ERROR");
}

导入lombok后使用@Slf4j注解,会自动创建变量名为log的Logger

只会输出INFO及以上的日志级别,因为SpringBoot默认日志级别为INFO

三.配置

通过yml文件配置日志(以logging开头的日志)

项目中通常不使用该方式

原因:

  1. 日志需要较多自定义,放yml里导致其他配置也难以阅读
  2. yml提供的日志配置只支持logback实现,切换实现后不可用
  3. yml提供的logback配置不够全面

通过xml配置日志

  • appender:负责写日志的组件(输出到控制台、文件、日志服务器、消息队列等等)
  • appender-ref:引用某个appender
  • layout:配置日志输出格式
  • springProfile:配置日志在开发/测试/生产环境生效
  • springProperty:在xml配置中引用yml的配置值
  • property:在xml中定义值

logback-spring.xml模板示例

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!--读取yml配置中的spring.application.name值赋值给FILE_NAME变量-->
    <springProperty scope="context" name="FILE_NAME" source="spring.application.name"/><!--定义FILE_PATH变量-->
    <property name="FILE_PATH" value="./logs"/>
    <springProfile name="dev"><!--开发环境的日志配置-->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!--输出到控制台-->
            <layout><!--设置日志格式-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss}[%thread] %-5level %logger -%msg%n</pattern>
            </layout>
        </appender>
        <root level="info"><!--设置日志等级 及 生效appender-->
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>
    <springProfile name="test"><!--测试环境的日志配置-->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <layout>
                <pattern>%d{yyyy-MM-dd HH:mm:ss}[%thread] %-5level %logger -%msg%n</pattern>
            </layout>
        </appender><!--输出到文件,文件会根据日期、大小进行归档-->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--文件路径-->
                <fileNamePattern>${FILE_PATH}/${FILE_NAME}%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <maxHistory>30</maxHistory><!--文件保存天数-->
                <maxFileSize>10MB</maxFileSize><!--一个文件最大值-->
            </rollingPolicy>
            <layout>
                <pattern>%d{yyyy-MM-dd HH:mm:ss}[%thread] %-5level %logger -%msg%n</pattern>
            </layout>
        </appender>
        <root level="info">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE"/>
        </root>
    </springProfile>
    <springProfile name="prod"><!--生产环境的日志配置-->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${FILE_PATH}/${FILE_NAME}%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <maxHistory>30</maxHistory>
                <maxFileSize>10MB</maxFileSize>
            </rollingPolicy>
            <layout>
                <pattern>%d{yyyy-MM-dd HH:mm:ss}[%thread] %-5level %logger -%msg%n</pattern>
            </layout>
        </appender>
        <root level="error">
            <appender-ref ref="FILE"/>
        </root>
    </springProfile>
</configuration>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java8日期时间类LocalDateTime比较大小举例

    Java8日期时间类LocalDateTime比较大小举例

    LocalDate是Java 8中的日期类之一,它表示一个日期,下面这篇文章主要给大家介绍了关于Java8日期时间类LocalDateTime比较大小的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • 使用quartz时,传入参数到job中的使用记录

    使用quartz时,传入参数到job中的使用记录

    这篇文章主要介绍了使用quartz时,传入参数到job中的使用记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 利用宝塔配置jdk环境的详细图文教程

    利用宝塔配置jdk环境的详细图文教程

    最近在宝塔面板上创建一个网站,为Java应用程序提供运行环境,所以下面这篇文章主要给大家介绍了关于利用宝塔配置jdk环境的详细图文教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • java实现字符串和数字转换工具

    java实现字符串和数字转换工具

    这篇文章主要为大家详细介绍了java实现字符串和数字转换工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Spring IOC简单理解及创建对象的方式

    Spring IOC简单理解及创建对象的方式

    这篇文章主要介绍了Spring IOC简单理解及创建对象的方式,本文通过两种方式给大家介绍创建对象的方法,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • SpringBoot实现登录注册的三种基本方式

    SpringBoot实现登录注册的三种基本方式

    本文简要介绍了cookie、session、JWT三种方式实现登录认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05
  • 详解Java面向对象中的继承

    详解Java面向对象中的继承

    这篇文章主要介绍了详解Java面向对象中的继承,继承提高代码的复用性:通过继承,子类可以直接使用父类的属性和方法,不需要重复定义,需要的朋友可以参考下
    2023-05-05
  • java实现简单三子棋游戏

    java实现简单三子棋游戏

    这篇文章主要为大家详细介绍了java实现简单三子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Mybatis拦截器实现公共字段填充的示例代码

    Mybatis拦截器实现公共字段填充的示例代码

    本文介绍了使用Spring Boot和MyBatis实现公共字段的自动填充功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Java的"伪泛型"变"真泛型"后对性能的影响

    Java的"伪泛型"变"真泛型"后对性能的影响

    泛型擦除本质上就是擦除与泛型相关的一切信息,例如参数化类型、类型变量等,Javac还将在需要时进行类型检查及强制类型转换,甚至在必要时会合成桥方法,这篇文章主要介绍了Java的"伪泛型"变"真泛型"后对性能的影响,需要的朋友可以参考下
    2025-05-05

最新评论