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>

总结

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

相关文章

  • SpringBoot实现多租户架构

    SpringBoot实现多租户架构

    在SpringBoot中可以通过多数据源和动态路由来实现多租户机制,本文主要介绍了SpringBoot实现多租户架构,具有一定的参考价值,感兴趣的可以里哦啊接一下
    2024-03-03
  • Java 8 Lambda 表达式比较器使用示例代码

    Java 8 Lambda 表达式比较器使用示例代码

    这篇文章主要介绍了Java 8 Lambda 表达式比较器使用示例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • springboot+mybatis报错找不到实体类的问题

    springboot+mybatis报错找不到实体类的问题

    这篇文章主要介绍了springboot+mybatis报错找不到实体类的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • java 线程方法join简单用法实例总结

    java 线程方法join简单用法实例总结

    这篇文章主要介绍了java 线程方法join简单用法,结合实例形式总结分析了Java线程join方法的功能、原理及使用技巧,需要的朋友可以参考下
    2019-11-11
  • Java中的内存泄露问题和解决办法

    Java中的内存泄露问题和解决办法

    大家好,本篇文章主要讲的是Java中的内存泄露问题和解决办法,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • SpringCloud中的@RefreshScope注解与使用场景方式

    SpringCloud中的@RefreshScope注解与使用场景方式

    SpringCloud中的@RefreshScope注解用于动态刷新Bean配置,解决外部配置变化时的问题,避免重启应用,通过本文的详细介绍,希望读者能够更好地掌握@RefreshScope的使用技巧,在实际项目中灵活应用,提升微服务应用的动态配置管理能力
    2024-12-12
  • SpringCloud分布式链路跟踪的方法

    SpringCloud分布式链路跟踪的方法

    这篇文章主要介绍了SpringCloud分布式链路跟踪的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Java等待唤醒机制线程通信原理解析

    Java等待唤醒机制线程通信原理解析

    这篇文章主要介绍了Java等待唤醒机制线程通信原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • java多线程使用mdc追踪日志方式

    java多线程使用mdc追踪日志方式

    这篇文章主要介绍了java多线程使用mdc追踪日志方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 实例解析Java中的构造器初始化

    实例解析Java中的构造器初始化

    这篇文章主要通过实例解析Java中的构造器初始化,代码很简单,叙述很明确,需要的朋友可以了解下。
    2017-09-09

最新评论