百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

一文带你搞懂SpringBoot日志如何配置?

off999 2025-01-21 20:36 20 浏览 0 评论

日志服务通常在产品设计的时候,不会被单独作为一个模块来说明,但是在很多系统架构中我们都会看到架构师在构建系统架构的时候,会将日志服务考虑在其中,当然,在现在这样的大数据背景下,很多的用户业务逻辑操作都是体现在日志中,例如在Nginx日志中可以看到请求接口访问情况,在MySQL的日志中可以分析出那些SQL执行的时间过长等等的。

那么既然这样,下面我们就来看看在Spring Boot中我们如何来处理业务日志吧?

这里需要说明 Spring Boot 的版本是 2.7.5 版本,不是最新版本,但原理都是一样。

日志级别

在讨论日志处理之前,首先我们先来了解一下什么是日志级别,常见的日志级别从低到高依次为 TRACE,DEBUG,INFO,WARN,ERROR,FATAL。

那么如何理解这个日志级别呢?一般来讲,我们在业务中处理中设置的日志级别都是INFO级别的日志,也就是说,当我们将日志设置成了INFO级别之后,比它级别更低的日志就看不到了,为什么这么做呢?

首先,日志分级别的话可以帮助开发者能够快速的定位到一些程序中出现的问题。不同级别的问题也就是代表着问题的严重性。

其次,在开发中不可能我们将所有的日志都进行收集,我们可以通过设置日志级别来排除一些在正常运行过程中其实不是那么重要的日志。

第三,通过日志的采集和分析,能够帮助我们监控应用程序的运行状态。

当然了在实际开发中日志级别的控制还可以用来做很多很多的事情,这里是笔者认为的日志分级别的几个关键点。

常见的日志框架

在日常开发中,常用到的日志框架有Log4j、LogBack、Log4j2。当然还有一些老的框架中还有一些其他的日志框架。

在这些框架中,可能听过最多的就是Log4j了吧,因为在Spring开发中我们会经常性的听到这个框架,而在Spring Boot中默认使用的是LogBack。

LogBack这个框架是基于Log4j框架开发出来的另一个开源的日志框架,与LogBack相比,性能不知道提升了多少倍,并且LogBack初始化加载的内存也变小了,或许这也是Spring Boot将其作为默认的日志框架的原因之一吧。

而Log4j2 是要比LogBack出现要晚,据官网的介绍,性能要比LogBack要更好,但是具体咱也没试过,所以这个就不需要再纠结了。因为日志框架太多了,那么如何找到一款适合项目的日志框架才是关键。下面我们就先来研究一下Spring Boot默认日志框架LogBack。

Spring Boot的默认日志框架

在上文中我们介绍了在SpringBoot中的默认的日志框架是LogBack,既然能够作为Spring Boot的默认日志框架,那么在实际的性能上,一定是经过了认证的研究的。所以在一般的开发过程中,建议先不要更换。

实际上,在Spring Boot应用创建好之后,框架就默认的将日志的相关引用也给加进去了,这就是Spring Boot的自动化配置所带来的高效之处,想想在Spring项目中还需要自己去配置依赖,引用日志组件等操作,Spring Boot框架确实是提供了很多便捷的操作。

在我们启动了Spring Boot项目之后,默认日志的级别是INFO,并且我们可以在日志中看到如下的一些内容。

  • 日志时间,精确到了毫秒级别
  • 日志级别,默认是INFO
  • 进程ID
  • 打印了日志分隔符
  • 线程名称
  • Logger的名称
  • 具体的日志内容

如何在代码中去使用日志呢?

首先在代码中添加日志,第一个目的就是为了能够追溯到业务操作流程相关信息,例如在一个IF条件判断的时候,在异常捕获的时候,都是为了能够更好的帮助我们定位问题,解决问题。那么我们如何在代码中添加日志操作呢?

在代码中添加日志操作的方式,一般来说有两种,一种是代码的方式,一种是通过Lombok注解的方式。

代码的方式

可以在业务逻辑代码中添加如下的内容。

Bash
private final Logger logger  = LoggerFactory.getLogger(TestController.class);

通过Lombok方式

想要在项目中使用Lombok,就需要先添加Lombok的相关依赖。如下所示,当然对于Lombok在开发过程中使用者对于它的评价是褒贬不一的。

Bash
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

添加完成依赖之后,就可以通过如下的方式来使用日志了。

@RestController
@Slf4j
public class TestController {   
    @GetMapping("/test")
    public String test(){
        log.info("这个是一个INFO级别的日志");
        return "Hello World!";
    }
}

看上去非常简单。使用起来也是非常方便。

如何调整日志级别呢?

既然Spring Boot提供了自动配置,那么就一定提供了日志级别的修改方式,我们可以通过如下的配置来调整SpringBoot应用的默认日志级别。

logging:
 level:
   root:DEBUG

如图所示,在我们输入调整日志级别之后,在配置文件中有如下的提示。也就是说,我们可以将整个项目的级别给设置成DEBUG级别,或者是我们可以将某个模块设置成对应的级别。

  • root:表示整个项目的日志级别
  • sql:数据库操作的日志级别
  • web:Web层日志操作级别
  • 其他包名,就是包名下的内容日志操作级别

我们可以根据自己的需要来为不同的包,不同的模块来设置合适的日志级别。

如何修改日志输出文件?

在Spring Boot中日志默认是输出到控制台中的,显然这种方式在生产环境中是不被允许的,所以我们需要去配置日志的输出路径。如下所示。

logging:
  level:
    root: debug
  file:
    path: ./log/
    name: spring.log

可以通过logging.file.path和loggin.file.name两个属性来配置,但是根据官网的文档介绍,这两个属性,我们只需要配置一个即可,否则是不生效的。

如何指定日志格式?

在默认情况下的日志格式,在项目启动的时候,就看到了。那么我们如何能够定制一下属于我们自己的日志格式呢?可以通过如下的两个属性来设置

  • logging.pattern.console:设置控制台日志格式
  • logging.pattern.file:设置日志文件中输出格式
logging:
  pattern:
    console: %d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
    file: %d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n

其中

  • yyyy/MM/dd-HH:mm:ss 表示日志输出的时间格式
  • thread 表示进程名称
  • 5level 表示日志级别
  • logger 日志输出者的名称
  • msg 日志消息
  • %n 换行符

如何自定义日志配置呢?

在Spring Boot 官方文档中,给出了根据不同的日志组件来设置不同的日志配置。例如我们默认使用的是LogBack,那么我们需要在resource目录下创建一个logback.xml的日志配置文件,就可以进行自定义的日志配置了。如图所示。

当然官方文档中还给出了其他的日志系统对应的配置文件的写法。

  • Logback:logback-spring.xml, logback.xml
  • Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
  • Log4j2:log4j2-spring.xml, log4j2.xml
  • JDK(Java Util Logging): logging.properties

当然既然是官方推荐,那么就以Logback为主,这个时候,我们就可以在这个Logback.xml文件中开始编写自己的日志配置方式了,如下图所示。由于篇幅有限,这里就不粘贴具体的源码信息了。有兴趣的读者可以自己查阅相关资料进行配置。

总结

到这里Spring Boot日志操作相关内容就介绍完了,那么在最后我们介绍了关于如何自定义日志配置,可以通过logback.xml的方式进行配置,由于篇幅有限,没有做过多的介绍,想了解原理的读者,可以自己查阅相关资料,或者是可以留言大家一起讨论。

相关推荐

一键打包,随时运行,Python3项目虚拟环境一键整合包的制作(Venv)

之前我们介绍了如何使用嵌入式Python3环境给项目制作一键整合包,在使用嵌入式Python环境时,通常是作为另一个应用程序的一部分,而Python3虚拟环境是为了在开发过程中隔离项目所需的...

PyInstaller 是一个将 Python 代码打包成可执行文件的工具

PyInstaller是一个将Python代码打包成可执行文件的工具。它可以将Python代码打包成Windows、Mac、Linux等平台下的可执行文件,使得你可以将Python应...

知识储备之用py2app将Python代码打包成MacOS可用的APP

自己电脑上有完整的python环境,所以偶尔写个小工具什么的都很easy,直接命令行run一波就OK,但是如果需要再朋友的电脑上运行,帮别人写了一个小工具,他没有运行环境,就很麻烦。不能让人家也从ho...

使用PyInstaller将Python文件打包成Windows系统可执行文件

官网PyInstaller官方网站:http://www.pyinstaller.org/国内镜像库PyInstallerGitee:https://gitee.com/mirrors/pyinst...

松勤技术精选:Python打包exe,换电脑也可直接运行哦!

为什么要打包exe有的时候只需要让别人运行某种功能,传输文件以及代码是需要别人配置好一定的环境才可以操作,而打包成exe文件就可以直接运行文件。pyinstaller打包python中毕竟常用的打包方...

111.Python——基于pipenv打包PaddlePaddle的GUI项目

飞桨PaddlePaddle是百度的深度学习框架,用来做一些项目还是非常不错。但是打包就是一件非常麻烦的过程。在文中有讲过打包问题。29.Python程序打包成可执行文件——常见疑难问题解决办法。本文...

「Python自学笔记」Beeware初体验之Python全平台应用打包

内容更新地址:【Python自学笔记】Beeware初体验,Python如何实现全平台应用打包(exeapkios)_xiaoqiangclub的博客-CSDN博客第一个应用安装环境这里的环境是W...

Python项目pyinstaller打包工具提示词整理出来了,太酷了

Python项目pyinstaller打包工具的提示词整理出来了,下面是完整的提示词请开发一个PythonGUI程序,功能是Python项目打包工具,具有以下特点:1.界面要求:使用PyQt5开发...

Python GUI开发:打包PySide2应用(spyder打包python)

之前的文章我们介绍了怎么使用PySide2来开发一个简单PythonGUI应用。这次我们来将上次完成的代码打包。我们使用pyinstaller。注意,pyinstaller默认会将所有安装的pack...

用Docker打包Python应用的关键要点与实践

引言在微服务架构和云原生时代,Docker已成为应用打包与部署的标准工具。本文将通过一个完整示例,介绍如何用Docker高效打包Python应用,并提炼出关键实践要点。一、Dockerfile基础结构...

精品收藏!Python 程序封装!打包成exe程序!

在Windows操作系统中,我们常用的桌面软件都是带有操作界面的软件,那么Python编写的程序如何才能让用户方便使用呢?因此,程序打包也成为用户的需求,下面详细介绍一下如何进行Python的程序打包...

用python开发的APP程序如何打包成APK安装文件

要将Python开发的APP程序打包成APK安装文件,可以使用第三方工具PyInstaller和Buildozer。下面是一个简单的步骤指南:安装PyInstaller和Buildozer:使用pip...

python打包按部就班(python打包安装文件)

一步一步安装软件包1,pywin32python.exe-mpipinstall--upgradepip更新pippipinstallPyInstaller安装打包工具编写最简单的hel...

爆强!直接把 Python 编写的图形程序打包为安卓 APP

请大家多多关注点赞哦如果想使用Python语言编写图形界面程序,那么有不少的框架可以提供支持,比如Tkinter、QtforPython、WxPython等等。不过这些框架都是只能创建桌面图...

PyOxidizer:将 Python 应用打包成单一可执行文件的神器

三、PyOxidizer基本使用使用PyOxidizer打包应用的基本流程如下:1.创建新项目首先,我们使用pyoxidizerinit命令创建一个新的PyOxidizer项目:py...

取消回复欢迎 发表评论: