Logback使用和常用配置

news2025/4/1 14:41:11

Logback 是 Spring Boot 默认集成的日志框架,相比 Log4j,它性能更高、配置更灵活,并且天然支持 Spring Profile 多环境配置。以下是详细配置步骤及常用配置示例。


一、添加依赖(非 Spring Boot 项目)

若项目未使用 Spring Boot,需手动添加 Logback 依赖:

<!-- Maven 依赖 -->
<dependencies>
    <!-- Logback 核心 -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.4.14</version>
    </dependency>
    <!-- 支持 Spring Profile 配置 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
        <version>3.2.0</version>
    </dependency>
</dependencies>

二、Logback 配置文件

配置文件名为 logback-spring.xmlSpring 推荐命名,logback-spring.xml,SpringBoot会自动加载),放置在 src/main/resources 目录下。

完整配置示例
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
    <!-- 通用日志格式 -->
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
    <!-- 日志文件路径 -->
    <property name="LOG_DIR" value="logs" />
    <property name="LOG_FILE" value="${LOG_DIR}/app.log" />

    <!-- 控制台输出(开发环境) -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <!-- 仅 dev 环境启用 name ="dev" dev是application.yaml文件中的spring.profiles.active的值 -->
        <springProfile name="dev">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>DEBUG</level>
            </filter>
        </springProfile>
    </appender>

    <!-- 滚动文件输出(生产环境) -->
    <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <!-- 滚动策略:按时间 + 大小 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/app-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- 异步日志(提升性能) -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <queueSize>1024</queueSize>
        <discardingThreshold>0</discardingThreshold>
        <appender-ref ref="ROLLING_FILE" />
    </appender>

    <!-- 日志记录器配置 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="ASYNC" />
    </root>

    <!-- MyBatis SQL 日志 -->
    <logger name="com.example.mapper" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
    </logger>

    <!-- Spring 框架日志降级 -->
    <logger name="org.springframework" level="WARN" />
</configuration>

注:日志文件如果不是logback-spring.xml的名字,springProfile配置会读取不到devprod等环境变量的值

三、核心配置详解

1. 全局配置
  • <configuration scan="true" scanPeriod="30 seconds">
    启用配置文件热更新,每隔 30 秒检查配置变化。
  • <property>
    定义变量(如 LOG_PATTERN),便于复用。

2. 输出器(Appenders)
a. 控制台输出(ConsoleAppender)
  • <encoder>:定义日志格式,%d 表示时间,%thread 为线程名,%-5level 左对齐日志级别。
  • <springProfile>:根据 Spring Profile 动态启用(如仅 dev 环境输出 DEBUG 级别)。
b. 滚动文件输出(RollingFileAppender)
  • <rollingPolicy>
    • SizeAndTimeBasedRollingPolicy:按时间和文件大小滚动。
    • fileNamePattern:归档文件名(%i 为滚动序号,.gz 自动压缩)。
    • maxFileSize:单个文件最大大小(触发滚动)。
    • maxHistory:保留最近 30 天日志。
    • totalSizeCap:日志总量上限(避免磁盘占满)。
c. 异步输出(AsyncAppender)
  • <queueSize>:异步队列大小(默认 256,增大可减少阻塞)。
  • <discardingThreshold>:队列剩余容量阈值(0 表示队列满时丢弃 INFO 以下日志)。

3. 日志记录器(Loggers)
  • <root>:根记录器,所有日志的默认配置。
  • <logger>
    • name:包或类名(如 com.example.mapper)。
    • level:日志级别(优先级高于 root)。
    • additivity="false":禁止向上传递日志事件(避免重复输出)。

四、Spring Profile 多环境配置

通过 springProfile 标签实现环境差异化配置:

<!-- 开发环境:输出 DEBUG 到控制台 name ="dev" dev是application.yaml文件中的spring.profiles.active的值 -->
<springProfile name="dev">
    <root level="DEBUG">
        <appender-ref ref="CONSOLE" />
    </root>
</springProfile>

<!-- 生产环境:仅输出 ERROR 到文件 name ="prod" prod是application.yaml文件中的spring.profiles.active的值-->
<springProfile name="prod">
    <root level="INFO">
        <appender-ref ref="ASYNC" />
    </root>
    <logger name="com.example" level="WARN" />
</springProfile>

五、代码中使用日志

在类中通过 SLF4J API 记录日志:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Service
public class UserService {
    private static final Logger logger = LoggerFactory.getLogger(UserService.class);

    public void createUser(String username) {
        logger.debug("创建用户: {}", username);  // DEBUG 级别需配置对应 Logger
        logger.info("用户创建成功: {}", username);
    }
}

六、常见问题排查

  1. 日志未输出

    • 检查 logback-spring.xml 是否在 src/main/resources 目录。
    • 确认依赖无冲突(排除其他日志框架如 Log4j)。
    • 检查日志级别是否允许(如 DEBUG 需 Logger 和 Root 均开启)。
  2. 滚动文件未生成

    • 确认 LOG_DIR 路径存在且有写入权限。
    • 检查 fileNamePattern 是否符合预期(如日期格式)。
  3. 性能问题

    • 使用异步 Appender 并增加 queueSize
    • 避免高频输出 DEBUG 日志(生产环境关闭)。

七、总结

通过 Logback 可实现:

  1. 多环境差异化配置:利用 springProfile 标签。
  2. 高效日志管理:异步输出 + 滚动归档。
  3. 精细化日志控制:按包或类设置级别。

建议生产环境配置:

  • 使用 AsyncAppender 提升性能。
  • 限制 maxHistorytotalSizeCap 防止磁盘溢出。
  • 关闭非必要 DEBUG 日志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2323758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL中累计求和与滑动求和函数sum() over()的用法

[TOC](SQL中累计求和与滑动求和函数sum() over()的用法) 一、窗口函数功能简介 sum(c) over(partition by a order by b) 按照一定规则汇总c的值&#xff0c;具体规则为以a分组&#xff0c;每组内按照b进行排序&#xff0c;汇总第一行至当前行的c的加和值。 sum()&#xff1a…

【Sql Server】在SQL Server中生成雪花ID(Snowflake ID)

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言认识雪花ID…

FPGA——分秒计数器设计(DE2-115开发板)

一、项目创建 1.创建工程 点击File->New Project Wizard...或者直接在页面处点击 在第一行选择文件存放地点&#xff0c;第二行为项目名称&#xff0c;第三行为顶级设计实体名称 &#xff08;下面的步骤可以暂时不做直接点Finish&#xff0c;因为是先写代码先把它跑出来暂…

雅思练习总结(九)

雅思练习总结&#xff08;九&#xff09; 本文章是雅思练习总结&#xff08;九&#xff09;&#xff0c;总结了文章《BAKELITE》&#xff0c;内容包括原文精翻&#xff0c;文章脉络总结&#xff0c;单词扩展学习3个部分 1 文章原文及翻译 BAKELITE 翻译&#xff1a;贝克莱特…

windows USB 了解

GUID GUID 是一个 128 位的数字&#xff0c;在全球范围内是独一无二的&#xff0c;常被用于标识软件组件、设备接口等&#xff0c;以保证在不同系统和环境中能唯一识别特定对象。 DEFINE_GUID(GUID_DEVINTERFACE_USCUSTOMKEYS, 0x12345678, 0x1234, 0x5678, 0x12, 0x12, 0x23…

光谱相机的光谱信息获取

光谱信息的获取方式主要依赖于不同分光技术和成像方法&#xff0c;将入射光分解为不同波长并记录其强度。以下是常见的光谱信息获取技术分类及原理&#xff1a; ‌1. 分光技术&#xff08;物理分解波长&#xff09;‌ ‌(1) 滤光片法‌ ‌原理‌&#xff1a;使用固定或可调滤…

免去繁琐的手动埋点,Gin 框架可观测性最佳实践

作者&#xff1a;牧思 背景 在云原生时代的今天&#xff0c;Golang 编程语言越来越成为开发者们的首选&#xff0c;而对于 Golang 开发者来说&#xff0c;最著名的 Golang Web 框架莫过于 Gin [ 1] 框架了&#xff0c;Gin 框架作为 Golang 编程语言官方的推荐框架 [ 2] &…

构建大语言模型应用:简介(第一部分)

本专栏聚焦大语言模型&#xff08;LLM&#xff09;相关内容的解析&#xff0c;通过检索增强生成&#xff08;RAG&#xff09;应用的视角来进行。 本系列文章 简介&#xff08;本文&#xff09;数据准备句子转换器向量数据库搜索与检索大语言模型开源检索增强生成评估大语言模…

PEmicro Multilink FX调试踩坑

文章目录 1.背景2 功能说明2.1 实时数据查看功能2.1 电压观测2.2 SWO功能 3 设置与支持 1.背景 既然使用了NXP的芯片&#xff0c;笔者就想使用一下它的专用调试器&#xff0c;这里先说一下&#xff0c;笔者是从朋友那里借了一个调试器&#xff0c;型号为PEmicro Multilink FX …

主流大模型采用的架构、注意力机制、位置编码等汇总表

记录下主流大模型的一些核心知识点&#xff0c;包括&#xff1a; 架构注意力机制位置编码归一化激活函数模型参数 表中的一些模型已经是很久之前的了&#xff0c;比如表中并未收入 DeepSeek V3 中使用的MLA的注意力机制。先占个位&#xff0c;后续如果有更新的汇总表再来更…

SpringBoot学习笔记3.27

目录 实战篇第二课 1.注册参数的校验&#xff1a; 学习过程中遇到的问题&#xff1a; 1.什么是正则表达式 2.怎么自定义异常&#xff1f; 1. 创建全局异常处理类 2. 定义响应对象 3. 使用 ExceptionHandler 4. 设置响应状态码 5. 返回统一响应 6. 测试全局异常处理 …

2025NCTF--Web

文章目录 Websqlmap-masterez_dashez_dash_revenge Web sqlmap-master 源码 from fastapi import FastAPI, Request from fastapi.responses import FileResponse, StreamingResponse import subprocessapp FastAPI()app.get("/") async def index():return File…

如何破解软件自动化测试框架的维护难题

破解软件自动化测试框架的维护难题应从优化测试用例设计、加强脚本的模块化与复用性、提高自动化测试工具的选择与使用效率等方面入手。其中&#xff0c;加强脚本的模块化与复用性尤为关键&#xff0c;通过提高脚本的模块化程度&#xff0c;可以显著降低后续维护成本&#xff0…

外星人入侵(python设计小游戏)

这个游戏简而言之就是操作一个飞机对前方的飞船进行射击&#xff0c;和一款很久之前的游戏很像&#xff0c;这里是超级低配版那个游戏&#xff0c;先来看看效果图&#xff1a; 由于设计的是全屏的&#xff0c;所以电脑不能截图。。。。 下面的就是你操控的飞船&#xff0c;上面…

iOS rootless无根越狱检测方案

不同于安卓的开源生态&#xff0c;iOS一直秉承着安全性更高的闭源生态&#xff0c;系统中的硬件、软件和服务会经过严格审核和测试&#xff0c;来保障安全性与稳定性。 据FairGurd观察&#xff0c;虽然iOS系统具备一定的安全性&#xff0c;但并非没有漏洞&#xff0c;如市面上…

LLM 优化技术(1)——Scaled-Dot-Product-Attention(SDPA)

在 Transformer 中抛弃了传统的 CNN 和 RNN&#xff0c;整个网络结构完全由Scaled Dot Product Attention 和Feed Forward Neural Network组成。一个基于 Transformer 的可训练的神经网络可以通过堆叠 Transformer 的形式进行搭建&#xff0c;Attention is All You Need论文中通…

基于音频驱动的CATIA动态曲面生成技术解析

一、技术背景与创新价值 在工业设计领域&#xff0c;参数化建模与动态仿真的结合一直是研究热点。本文提出的音频驱动建模技术突破了传统参数调整方式&#xff0c;实现了音乐节奏与三维曲面的实时动态交互。该技术可广泛应用于以下场景&#xff1a; ​艺术化产品设计&#xf…

5-管理员-维护权限

在“后台”-“人员管理”-“权限”下&#xff0c;通过不同的操作按钮&#xff0c;按照权限分组对权限进行设置。操作部分的按钮依次为 视野维护&#xff1a;设置该分组可以查看、访问的视图。权限维护&#xff1a;设置分组成员可以操作的具体动作等所有在禅道中涉及的权限。成…

全新升级 | Built For You Spring ‘25 发布,Fin 智能客服实现新突破!

图像识别、语音交互、任务自动化&#xff0c;立即体验智能客服蜕变&#xff01; 上周&#xff0c;Intercom 举办了 Built For You Spring 25 发布会&#xff0c;正式揭晓了 AI Agent Fin 的一系列令人振奋的更新。Fin 正在以前所未有的速度革新客户支持模式——它已经成功解决了…

LeeCode 434. 字符串中的单词数

统计字符串中的单词个数&#xff0c;这里的单词指的是连续的不是空格的字符。 请注意&#xff0c;你可以假定字符串里不包括任何不可打印的字符。 示例: 输入: "Hello, my name is John" 输出: 5 解释: 这里的单词是指连续的不是空格的字符&#xff0c;所以 "…