作者平台:
| CSDN:blog.csdn.net/qq\_4115394…
| 掘金:juejin.cn/user/651387…
| 知乎:www.zhihu.com/people/1024…
| GitHub:github.com/JiangXia-10…
| 微信公众号:1024笔记
本文大约4777字,预计阅读时长11分钟
前言
日志系统作为一个应用系统的重要部分之一,它能够有助于我们在系统在线上环境中如果有问题,及时发现问题,并且定位问题,从而解决问题,保证服务的高可用,减少生产事故的发生。所以日志的重要性,不言而喻。
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配置文件中的相关配置,对于日志的自定义都可以在配置文件中进行相关配置:
比如我这里的部分配置如下:
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配置文件中配置的日志保存路径下,会根据配置生成对应的日志文件,如下:
总结
日志系统的强大的功能是我们日常开发,系统维护排查问题和解决问题的有利工具,所以根据自己的实际项目配置合理的日志系统,有助于我们更好地开发和维护好项目系统!
如有任何问题或者不对的地方欢迎一起交流讨论学习!
本项目源码在:
github.com/JiangXia-10…
欢迎下载、Star!
相关推荐:
-
SpringBoot多数据源配置
-
SpringBoot整合Redis使用教程
-
Springboot+Vue整合笔记【超详细】
-
SpringBoot开发Restful风格的接口实现CRUD功能文章来源:https://www.toymoban.com/news/detail-418079.html
-
Spring注解(六):Bean的生命周期中自定义初始化和销毁方法的四种方式文章来源地址https://www.toymoban.com/news/detail-418079.html
到了这里,关于SpringBoot集成slf4j日志系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!