SpringBoot集成slf4j日志系统

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 日志系统作为一个应用系统的重要部分之一,它能够有助于我们在系统在线上环境中如果有问题,及时发现问题,并且定位问题,从而解决问题,保证服务的高可用,减少生产事故的发生。所以日志的重要性,不言而喻。

前言


日志系统作为一个应用系统的重要部分之一,它能够有助于我们在系统在线上环境中如果有问题,及时发现问题,并且定位问题,从而解决问题,保证服务的高可用,减少生产事故的发生。所以日志的重要性,不言而喻。


Java开发使用的日志框架有很多,常用的比如有JUL(java.util.logging)、log4j、logback、JCL(Jakarta commons-logging)等等。SpringBoot 提供了一套日志系统,SpringBoot 默认选择的是 SLF4J + Logback 的组合,如果不需要更改为其他日志系统(如 Log4j2 等),则无需多余的配置,LogBack 默认会将日志打印到控制台上。 由于新建的 Spring Boot 项目一般都会引用 spring-boot-starter 或者 spring-boot-starter-web,而这两个起步依赖中都已经包含了对于 spring-boot-starter-logging 的依赖,所以,我们无需额外添加依赖。


接下来,本文主要总结一下项目中目前使用的SpringBoot集成slf4j日志配置。


什么是slf4j


slf4j,全称是Simple Logging Facade for Java****,简单门面日志。它是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,它只服务于各种各样的日志系统。


slf4j提供了统一的记录日志的接口,对不同日志系统的具体实现进行了抽象化,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过绑定具体的日志系统来实现。在项目中使用了slf4j记录日志,并且绑定了log4j(pom.xml中配置了相应的jar包依赖),则日志会以log4j的风格输出;后期需要改为以logback的风格输出日志,只需要将jar包log4j替换成logback即可,根本不需要修改日志文件的代码。


前面说到SpringBoot 默认选择的是 SLF4J + Logback 的组合,如果不需要更改为其他日志系统,则无需多余的配置即可使用。首先就看一个最简单的用法,如下,在启动类中引入Logger日志记录,看下打印的日志结果:


public class SpringbootdemoApplication {
    private static final Logger logger = LoggerFactory.getLogger(SpringbootdemoApplication.class);
    public static void main(String[] args) {
        logger.info("===============项目启动了===============");
        SpringApplication.run(SpringbootdemoApplication.class, args);
        logger.info("===============启动成功了===============");
    }
}
复制代码


项目启动成功后控制台日志信息如下 :


这里最主要的方法就是LoggerFactory的getLogger(xxxxxxx.class)。这个方法是将当前所在的类作为入参传递,输出日志就会显示对应的xxx类名。这样声明的好处就是方便定位日志,准确编写class信息能够提供快速定位日志的效率。


虽然SpringBoot提供了slf4j,但是日志记录是需要根据项目实地需要进行配置后,才能有助于我们更好地使用它。


使用slf4j


因为springboot默认集成了slf4j,所以在新建的 Spring Boot 项目一般都会引用 spring-boot-starter 或者 spring-boot-starter-web,而这两个起步依赖中都已经包含了对于 spring-boot-starter-logging 的依赖,所以,无需在pom文件中导入额外添加依赖。如果再导入sl4j相关依赖,可能会出现多个相同依赖的错误。


接下来看看application.yml配置文件中的相关配置,对于日志的自定义都可以在配置文件中进行相关配置:


215df24a40c3460e903e59f1aa91f046~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


比如我这里的部分配置如下:


logging:
#logging.config是用来指定项目启动的时候,读取哪个配置文件,这里指定的是日志配置文件,即子module项目根路径下的 logback.xml文件,该文件是日志的主要配置信息。
  config: /workspace/java/SpringBootWorkSpace/src/main/resources/locbak.xml
 # level用来配置指定包的路径下应用程序的日志记录,及其日志级别。
  level:
    root: info
    com.springboot.springbootdemo.controller: trace
    com.springboot.springbootdemo.service: debug
    com.springboot.springbootdemo.dao: debug
复制代码


logging.level用来指定具体的包中应用程序日志的输出级别。trace表示将com.springboot.springbootdemo.controller包下的所有日志输出级别为 trace,会将操作数据库的 sql 打印出来,开发时设置成 trace 方便定位问题,在生产环境上,将这个日志级别再设置成 error 级别即可。


日志常用的五个级别,根据严重程度由低到高,依次为:debug(调试 ) < info(消息) < warn(警告) < error(错误) < fatal(严重错误)。通常可以根据实际所需要的颗粒度的大小选择其中的几个,比较常用debug,info,warn,error4个级别。

实际开发需要制定日志的配置文件内容,这样系统运行后,根据定制化需求才能输出我们所需的指定日志记录信息。可以在 resource文件夹下新增locbak.xml配置文件,并且在application.yml配置文件中如上设置config路径(需是绝对路径),logback.xml配置文件详细内容如下:


<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="/SpringBootWorkSpace/SpringBootWorkSpace/logs"/>    <!-- 定义日志格式  -->
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>
    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/SpringBootWorkSpace-Slf4j_%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
    <!-- 日志输出级别 -->
    <logger name="org.springframework" level="INFO"/>
    <logger name="root" level="INFO"/>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>
复制代码


在logback.xml中可以定义日志输出的格式、路径、控制台输出格式、文件大小、保存时长等内容。其实这些文件也可以在application.yml配置文件中进行配置,比如:


logging:
# 日志文件最大的大小
  file:
    max-size: 10MB
   # 日志文件保留天数
    max-history: 7
复制代码


上述配置完成之后,启动项目则在logback.xml配置文件中配置的日志保存路径下,会根据配置生成对应的日志文件,如下:


a83510255ada467f8664e3904018e926~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


aa882d841be64e849da68bb5567b1425~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


日志系统的强大的功能是我们日常开发,系统维护排查问题和解决问题的有利工具,所以根据自己的实际项目配置合理的日志系统,有助于我们更好地开发和维护好项目系统!


如有任何问题或者不对的地方欢迎一起交流讨论学习!

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
3月前
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
194 1
|
6月前
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
311 0
|
6月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
241 0
|
6月前
|
NoSQL Java 关系型数据库
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
本文介绍在 Spring Boot 中集成 Redis 的方法。Redis 是一种支持多种数据结构的非关系型数据库(NoSQL),具备高并发、高性能和灵活扩展的特点,适用于缓存、实时数据分析等场景。其数据以键值对形式存储,支持字符串、哈希、列表、集合等类型。通过将 Redis 与 Mysql 集群结合使用,可实现数据同步,提升系统稳定性。例如,在网站架构中优先从 Redis 获取数据,故障时回退至 Mysql,确保服务不中断。
265 0
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
|
3月前
|
前端开发
SpringBoot2.3.1集成Knife4j接口文档
SpringBoot2.3.1集成Knife4j接口文档
446 44
|
2月前
|
缓存 JSON 前端开发
第07课:Spring Boot集成Thymeleaf模板引擎
第07课:Spring Boot集成Thymeleaf模板引擎
375 0
第07课:Spring Boot集成Thymeleaf模板引擎
|
2月前
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
327 2
|
2月前
|
分布式计算 Java 大数据
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
141 2
|
2月前
|
存储 人工智能 Java
Springboot集成AI Springboot3 集成阿里云百炼大模型CosyVoice2 实现Ai克隆语音(未持久化存储)
本项目基于Spring Boot 3.5.3与Java 17,集成阿里云百炼大模型CosyVoice2实现音色克隆与语音合成。内容涵盖项目搭建、音色创建、音频合成、音色管理等功能,适用于希望快速掌握Spring Boot集成语音AI技术的开发者。需提前注册阿里云并获取API Key。

热门文章

最新文章