当前位置: 首页 > news >正文

SpringBoot项目增加logback日志文件

一、简介

在开发和调试过程中,日志是一项非常重要的工具。它不仅可以帮助我们快速定位和解决问题,还可以记录和监控系统的运行状态。Spring Boot默认提供了一套简单易用且功能强大的日志框架logback,本文将介绍如何在Spring Boot项目中配置和使用logback日志文件。

二、pom文件依赖查看

因为SpringBoot项目默认就是使用的就是logback日志系统,创建SpringBoot项目时引入的spring-boot-starter或者spring-boot-starter-web依赖jar包中已经包含了spring-boot-starter-logging的依赖,里面同时包含多种日志系统依赖,如下图所示:

在这里插入图片描述

jar包里面已经包括logback和log4j,所以,无需额外添加依赖,直接配置logback.xml就可以了

此外,如果需要切换为log4j2,那么需要在spring-boot-starter-web依赖中排除springboot自带的commons‐logging,然后在引入log4j2的依赖jar包,代码如下:

<!--排除 commons‐logging-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>commons‐logging</groupId><artifactId>commons‐logging</artifactId></exclusion></exclusions>
</dependency><!--引入log4j2 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

三、创建logback日志文件步骤

    1. 添加了Spring Boot Starter依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 其他依赖 -->
</dependency>
    1. 在项目的src/main/resources目录下创建一个logback-spring.xml文件。这是logback的配置文件,Spring Boot会自动加载它。
    1. 通过自定义logback.xml配置文件来控制日志输出情况,通常我们会配置三个日志组件:
    • 控制台输出
    • 输出info级别日志文件
    • 输出error级别日志文件

以下为logback.xml完整配置:

<!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
<configuration scan="true" scanPeriod="2 seconds"><!--定义日志文件的存储地址--><property name="LOG_PATH" value="./logs" /><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%-5level:级别从左显示5个字符宽度,%t表示线程名,%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern></encoder></appender><!-- info级别日志文件输出 --><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 日志文件输出的文件名 --><File>${LOG_PATH}/info.log</File><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 每日生成日志文件或日志文件大小超出限制后输出的文件名模板 --><fileNamePattern>${LOG_PATH}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 日志文件保留天数 --><maxHistory>30</maxHistory><!-- 日志文件最大大小:100MB --><maxFileSize>100MB</maxFileSize></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern></encoder></appender><!-- error级别日志文件输出 --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 日志输出级别,优先级 > '<root level>' --><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter><File>${LOG_PATH}/error.log</File><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory><maxFileSize>100MB</maxFileSize></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern></encoder></appender><!-- 默认日志输出级别 --><root level="INFO"><appender-ref ref="STDOUT" /><appender-ref ref="INFO_FILE" /><appender-ref ref="ERROR_FILE" /></root></configuration>

四、logback配置说明

  • 根节点configuration用于配置日志系统的行为。它包含以下三个属性:
<configuration scan="true" scanPeriod="2 seconds" debug="false"></configuration>

scan:当配置文件发生更改时,是否重新加载配置,默认值为true。
scanPeriod:检测配置文件修改的时间间隔,默认值为6000毫秒。
debug:是否打印logback内部日志信息以实时查看logback的运行状态,默认值为false。

  • 子节点property
<property name="LOG_PATH" value="./logs" />

用来定义变量值,包含以下两个属性:

name:变量名称
value:变量定义的值
通过property定义的值会被插入到logger上下文中,可以使${}来使用变量,这里定义了log的保存位置根目录。

  • 子节点appender
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"></appender>

是负责写日志的组件,通过自定义日志组件控制日志输出的情况,包含以下两个属性:

  • name:组件名称
  • class:组件class指定的类名
    不同的class,对应不同的功能:
    ch.qos.logback.core.ConsoleAppender会把日志输出到控制台
    ch.qos.logback.core.rolling.RollingFileAppender把日志内容输出到指定文件
  • File节点:日志文件输出的文件名
<File>${LOG_PATH}/info.log</File>
  • filter节点:过滤器,用来指定日志组件的日志输出级别,优先级高于root节点的level
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level>
</filter>
  • rollingPolicy节点

滚动日志文件配置,涉及日志文件的移动和重命名,只有一个class属性,用来指定滚动策略,这里使用的是ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy

包含以下三个属性:

fileNamePattern:发生滚动时的日志命名方式
maxHistory:日志文件的最大保留时间,超过设定时间后会自动删除
maxFileSize:每份日志文件的最大限制,超出限制后会重新生成,并将旧的日志文件按照fileNamePattern设定的日志命名方式进行命名
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory><maxFileSize>100MB</maxFileSize>
</rollingPolicy>
  • 子节点encoder
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>

对记录事件进行格式化,负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。PatternLayoutEncoder是唯一有用的且默认的encoder,有一个节点,用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“%”进行转义。

  • 子节点root

logger,是所有logger的最上级,且只有一个level节点,用类设置打印日志的级别,默认值为debug,通常设置为info,此外还有trace、warn、error、all、off级别。
子节点appender-refref属性指定日志组件名称,即appendername属性值。

五、使用logback

# 配置日志文件
logging:config: classpath:logback.xml#设置日志级别的节点level:com:jzj: debug

通过以上步骤,我们成功地在Spring Boot项目中配置和使用了logback日志文件。logback提供了丰富的配置选项和强大的日志功能,可以帮助我们更好地进行系统开发和调试。希望本文对您有所帮助!

http://www.lryc.cn/news/111505.html

相关文章:

  • 复习之selinux的管理
  • 无涯教程-Lua - 文件I/O
  • java+ssm民宿酒店客房推荐预订系统_2k78b--论文
  • Docker实战-关于Docker镜像的相关操作(一)
  • Jenkins Gerrit Trigger实践
  • Xcode protobuf2.5添加arm64编译器补丁生成静态库
  • 计算机毕设 深度学习疫情社交安全距离检测算法 - python opencv cnn
  • 四数之和——力扣18
  • Serializable 和 Externalizable区别?
  • 2023 电赛 E 题 K210 方案--K210实现矩形识别
  • 【雕爷学编程】MicroPython动手做(29)——物联网之SIoT 2
  • chapter13:springboot与任务
  • (十一)大数据实战——hadoop高可用之HDFS手动模式高可用
  • problem(3):python IDE和python解释器
  • 【C语言进阶篇】模拟实现通讯录 (内附源码)
  • Python web实战之 Django 的模板语言详解
  • 使用ChatGPT编写技术文档
  • Java超级玛丽小游戏制作过程讲解 第四天 创建并完成常量类03
  • webpack基础知识八:说说如何借助webpack来优化前端性能?
  • JAVA SE -- 第十五天
  • macOS 环境变量加载探究
  • 在程序中如何判断该线程的线程id(get_id())的返回值是一个无效值
  • ffmpeg-ffplay代码架构简述
  • ⛳ 多线程面试-什么是多线程上下文切换?
  • vb+SQL车辆管理系统设计与实现
  • java的枚举类
  • 基于java早餐店点餐系统源码设计与实现
  • ODOO16如何处理采购运输正常损耗的成本价核算?
  • 【数据预测】基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测 短期功率预测【Matlab代码#54】
  • 函数式编程-将过程作为返回值的应用:分步过程