前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Spring Boot+LogBack】高效记录日志,实现日志文件本地化保存!

【Spring Boot+LogBack】高效记录日志,实现日志文件本地化保存!

原创
作者头像
bug菌
修改2023-09-27 16:25:42
3.8K0
修改2023-09-27 16:25:42
举报
文章被收录于专栏:《项目实战教学》
🏆本文收录于 《Spring Boo

本专栏致力打造最硬核Spring Boot 系列教程,从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。

代码语言:javascript
复制
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

前言

在开发中,日志是非常重要的一部分,我们可以在日志中排查各种问题,优化程序。Spring Boot是非常流行和方便的框架,而Logback是一个非常成熟和稳定的日志框架。本文将介绍如何使用Spring Boot整合Logback来实现日志文件本地保存。

摘要

本文将提供一种使用Spring Boot和Logback的方法来实现日志文件本地保存,首先介绍一下Logback框架的基本知识和使用方法,然后再介绍如何将Logback和Spring Boot集成起来,最后演示如何使用Logback来记录日志并保存到本地文件中。

Logback

Logback是一个成熟和稳定的日志框架,是Log4j框架的继承者,具有更好的性能和更加丰富的配置选项。它可以与Spring Boot框架集成,实现日志输出到控制台或者文件。

Logback的基本概念

Logback由三个模块组成:

  • logback-core:提供了更低级别的功能,最基本的日志系统。
  • logback-classic:提供了更高级别的功能,比如SLF4J API的实现,支持MDC(Mapped Diagnostic Contexts)。
  • logback-access:提供了用于HTTP访问日志的功能,包括访问日志和基于XML的HTTP访问日志。

Logback使用Logger来记录和输出日志,LoggerContext是Logger的容器,主要维护Logger和Appender的关系。

Appender用于将日志输出到不同的地方,比如控制台或者文件。

Logback的配置文件

Logback的配置文件是一个XML文件,名字为logback.xml,默认放在classpath根目录下。

下面是一个简单的logback.xml示例:

代码语言:html
复制
<?xml version="1.0" encoding="UTF-8"?>

<configuration>

  <!-- 输出到控制台 -->
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <!-- 输出到文件 -->
  <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>log/demo.log</file>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>log/demo.%d{yyyy-MM-dd}.log</fileNamePattern>
    </rollingPolicy>
  </appender>

  <!-- 设置日志输出级别 -->
  <root level="INFO">
    <appender-ref ref="console" />
    <appender-ref ref="file" />
  </root>

</configuration>

配置文件中定义了两个Appender,一个输出到控制台,一个输出到文件。第一个Appender的class属性设置为ConsoleAppender,表示将日志输出到控制台。第二个Appender的class属性设置为RollingFileAppender,表示将日志输出到文件。其中,文件名为log/demo.log,日志文件会按照日期进行切分。

Logback的日志级别

Logback定义了五个日志级别,按照从低到高的顺序为TRACE、DEBUG、INFO、WARN、ERROR。在实际应用中,应根据需要选择适当的日志级别。

整合Spring Boot和Logback

Spring Boot可以非常方便地和Logback集成,只需要在pom.xml文件中添加logback依赖即可:

代码语言:html
复制
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
  <version>2.5.2</version>
</dependency>

示例如下:

Spring Boot默认使用Logback作为日志框架,所以在添加了logback依赖之后,Spring Boot会自动识别和加载classpath下的logback.xml文件。

在Spring Boot中使用Logback

在Spring Boot中使用Logback非常简单,只需要在代码中使用Logger输出日志即可。LoggerFactory是Logback提供的工厂类,可以用来获取Logger实例。

下面是一个简单的示例:

代码语言:java
复制
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Demo {

  private static final Logger logger = LoggerFactory.getLogger(Demo.class);

  public void test() {
    logger.info("Hello, world!");
  }

}

上面代码中,我们定义了一个Demo类,并使用LoggerFactory获取了一个Logger实例。在test方法中,我们使用Logger输出一条日志。

配置日志级别

默认情况下,Spring Boot的日志输出级别为INFO,如果要修改日志输出级别,可以在application.properties或application.yml文件中添加如下配置:

代码语言:text
复制
logging.level.<package>=<level>

其中,<package>表示要设置日志级别的包名,<level>表示要设置的日志级别,可以是TRACE、DEBUG、INFO、WARN、ERROR。例如,要将org.springframework包下的日志级别设置为DEBUG,可以添加如下配置:

代码语言:text
复制
logging.level.org.springframework=DEBUG

日志文件本地保存

除了将日志输出到控制台之外,我们还可以将日志保存到文件中。Logback可以通过FileAppender或者RollingFileAppender来实现日志文件本地保存。

FileAppender

FileAppender是一种将日志输出到指定文件的Appender。下面是一个FileAppender的示例:

代码语言:html
复制
<appender name="file" class="ch.qos.logback.core.FileAppender">
  <file>logs/demo.log</file>
  <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
</appender>

上面的示例中,我们定义了一个名为file的Appender,在logs/demo.log文件中保存日志。pattern属性定义了日志输出的格式。

RollingFileAppender

RollingFileAppender是一种按照一定规则切分日志文件的Appender。它可以按照时间、文件大小等规则来切分日志文件。下面是一个RollingFileAppender的示例:

代码语言:html
复制
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>logs/demo.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>logs/demo.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
    <maxFileSize>10MB</maxFileSize>
    <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
</appender>

上面的示例中,我们定义了一个名为file的Appender,使用了SizeAndTimeBasedRollingPolicy进行日志文件切分。fileNamePattern属性定义了日志文件名的格式,%d{yyyy-MM-dd}表示按照日期切分,%i表示文件索引号(如果文件大小超过了10MB,则会切分为新的文件,索引号会+1)。maxFileSize属性定义了每个日志文件的最大大小,maxHistory属性定义了保留的日志文件数量。

测试用例

下面给出一个简单的测试用例:

代码语言:java
复制
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DemoApplication {

  private static final Logger logger = LoggerFactory.getLogger(DemoApplication.class);

  public static void main(String[] args) {
    logger.info("Hello, world!");
  }

}

在运行该测试用例之后,日志信息会被输出到控制台和logs/demo.log文件中。

全文小结

本文介绍了在Spring Boot应用程序中集成Logback日志框架,并实现了日志文件本地保存的方法。通过上述配置和测试,我们可以看到应用程序的日志已经能够成功输出到指定的目录中。最后,需要注意的是,在配置日志文件输出时,需要根据实际需求进行日志文件切割和日志文件保存天数设置,否则可能会导致系统磁盘空间被占用过多。

关于我

👨‍🎓作者:bug菌 ✏️博客: CSDN、 掘、 infoQ、 51CTO等 🎉简介:CSDN|阿里云|华为云|51CTO等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号 「猿圈奇妙屋」 ,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料.

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 摘要
  • Logback
    • Logback的基本概念
      • Logback的配置文件
        • Logback的日志级别
        • 整合Spring Boot和Logback
          • 在Spring Boot中使用Logback
            • 配置日志级别
            • 日志文件本地保存
              • FileAppender
                • RollingFileAppender
                • 测试用例
                • 全文小结
                • 关于我
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档