惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
Recent Commits to openclaw:main
Recent Commits to openclaw:main
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
罗磊的独立博客
V
Visual Studio Blog
爱范儿
爱范儿
H
Help Net Security
J
Java Code Geeks
I
InfoQ
Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recorded Future
Recorded Future
Jina AI
Jina AI
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
GbyAI
GbyAI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
Scott Helme
Scott Helme
S
SegmentFault 最新的问题
S
Securelist
L
LINUX DO - 热门话题
Cyberwarzone
Cyberwarzone
C
Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
G
Google Developers Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
博客园_首页
B
Blog
F
Fortinet All Blogs
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
S
Secure Thoughts
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Forbes - Security
Forbes - Security
S
Security @ Cisco Blogs
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Schneier on Security
Project Zero
Project Zero
Martin Fowler
Martin Fowler
C
Cybersecurity and Infrastructure Security Agency CISA
N
Netflix TechBlog - Medium
N
News and Events Feed by Topic

博客园 - CharyGao

OpenAI Codex AI降智解决方案, 原因解析与系统提示词修改指南 OpenClaw vs Coze/Dify/n8n 帮你半小时内选对合适的AI Skills 热潮过去后,我重新理解了 AI Agent 的方向 智读致用|《埃隆之书》 《一人企业》 一人公司:The Agency 免费“雇佣“144个AI专家,虚拟团队走进现实 用微软Agent Framework打造智能博客生成系统+AI智能体军团 告别加班(第二期):月报还是Word排版?本地AI解您愁 居然可以在 Claude 桌面端用三方模型了! Claude Code 每次启动都要确认权限?一行配置永久解决 98.5% 的人都不知道:SSH 居然还有个“隐藏菜单” 强程序员在 AI 时代的赚钱路径 骚操作来了!Claude编程的42个实战技巧大全 面试官:“简历写着熟练使用 Claude Code,连 simplify 代码审查命令都不知道!”,我:“那又如何呢?” SpringBoot+ResponseBodyEmitter异步流式推送神技 加密后的数据如何进行模糊查询? 最适合新手安装的10个小龙虾🦞 skills来了! 周末和孩子必看的亲子电影合集,陪伴孩子成长的每一步 拒绝代码泄露与“屎山”迷航:GitNexus纯本地知识图谱+可视化关系网,引发GitHub 8800星狂欢 还原BatchEncryption(201610版本)混淆的批处理文件 用上这个Skill,你的Claude Code/Codex 将会比别人快5倍 -- 用分布式思维驯服AI任务编排 前端项目中定义vs code要安装的插件 vscode中claude code插件代理地址设置 2026新手必学:GPT-5.5高效提示词指南 解决 URLEncoder.encode 编码空格变 + 号 Springboot通过谷歌Kaptcha 组件,生成图形验证码 HTTP 与 SpringBoot 参数提交与接收协议方式 SpringBoot多线程池配置 SpringBoot + Cursor 最佳提示词工程手册 scoop国内安装方法 Prompt 工程实战总结:文本分类、信息抽取、语义匹配 PowerShell DSC(Desired State Configuration)实战指南 OpenResty Lua 代码断点 调试指南:VSCode + LuaPanda OpenClaw多智能体路由实战:飞书多机器人配置指南 OpenClaw 提示词全集 (Prompt Collection) n8n 2.0 中文汉化版一键部署教程 | 解除Execute Command限制 java中Redisson ,jedis,Lettuce和Spring Data Redis的四种深度对比和优缺点详解 Java Web 技术演进:Servlet → Spring → Spring Boot Everything Claude Code(Anthropic 黑客松冠军开源配置) 从 ChatGPT 到 Coding Agent:AI 执行时代的未来猜想 【万字长文】Gemini 3 Pro 全面指南:从免费订阅到 CLI / Agent 实战 Codex 全面实战教程:从安装到工程协作,一篇跑通 3万字硬核拆解 Claude Code:从入门到工程化落地 Gemini 3 完整指南 Codex 完整指南 Claude Code 完整指南4-10 Claude Code 完整指南 claude code 自动保存对话插件 提示词99+ 拜拜Cursor,你好Kiro!(附全平台安装包下载,Win、Mac、Linux) 别再忍了!uv 下载慢如龟速?一招配置国内镜像,让你的 Python 体验坐上火箭! docker配置参数详解---/etc/docker/daemon.json完整参数 win11 清理 OpenCowork 让 AI 在飞书里真正「动手干活」 教你从0到1安装OpenClaw,快速接入飞书,打通任督二脉! SpringBoot 最大连接数及最大并发数是多少??? SpringBoot vs Nginx:5种实现vs1个指令,谁才是防盗链的“真·王者”? Spring Boot日志集成 Redisson 使用手册:从 API 误区到看门狗失效,在此终结分布式锁的噩梦 OpenClaw超级速查表 zeroclaw ubunut25 -ARM 修改国内镜像 openClaw国内镜像安装 知识图谱 —— 结构化知识的强大工具 什么是 Supervised learning(监督学习) 机器学习中的过拟合与欠拟合现象:理论与实践案例研究 解析 Anthropic 的模型上下文协议(MCP)及其优点
springboot使用logback自定义日志
charygao1990 · 2026-05-06 · via 博客园 - CharyGao

前言

1、末尾有完整配置文件

2、日志分为五个等级,按照优先级的高低可以分为:

TRANCE < DEBUG < INFO < WARN < ERROR

springboot默认是INFO,因此低于INFOTRACEDEBUG都不会输出。

可以在propertiesyaml配置文件中修改日志级别:

logging:
  level:
    root: debug

这里的root可以换成包名,精细控制不同包的日志输出级别,比如:

logging:
  level:
    com.example.controller: debug
    com.example.mapper: error

3、其次,logback的日志分为控制台日志和文件日志。

控制台日志:也就是我们IDE运行项目时,控制台打印的信息。

文件日志:项目运行时,将运行信息写入到指定文件。需要在springboot配置文件或logback配置文件中指定日志文件的位置。

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

解释:按理来讲需要引入的是spring-boot-starter-logging依赖,但是spring-boot-starter-web间接依赖于spring-boot-starter-logging,所以我们只需要引入spring-boot-starter-web即可。

使用logback

logback会自动寻找classpath根部下面的logback.xml,所以我们只需要在resource目录下创建logback.xml文件,就可以在程序启动时,自动加载自定义日志的配置文件。

如果不想叫logback.xml,想起一个有个性的名字,比如cxkLogback.xml,那么需要在propertiesyaml配置文件指定logback文件路径:

logging:
  config: classpath:cxkLogback.xml

如果想验证一下,可以将下方概览中的配置文件复制到自己的项目中运行一下,观察控制台的日志输出格式。

配置文件概览

可以简单先看一个配置文件的案例

<?xml version="1.0" encoding="UTF-8"?>
<!--
    scan:当配置文件修改后,将会重新载入。
    scanPeriod:设置检测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。
    debug:为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- 定义一个名为STDOUT的控制台输出Appender -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
        	<!-- 输出格式 -->
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 定义一个名为FILE的文件输出Appender -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <!-- 设置日志文件的存放路径和文件名,可根据实际情况修改 -->
        <file>logs/app.log</file>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 配置根日志记录器,设置日志级别为DEBUG,并将日志输出到STDOUT和FILE这两个Appender -->
    <root level="info">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

</configuration>

这个文件主要定义了两个Appender,分别输出日志到控制台和文件中。

其次定义root目录的日志级别,并将两个Appender配置到root目录下,进行日志输出。

这里的root标签里面定义了level,有没有感觉在哪里见过这个东西?

没错,上文讲到,我们可以在propertiesyaml配置文件中修改日志级别,在springboot配置文件中的操作,和这里的操作是等价的。那么按照同样的道理,这里的root也可以细化成不同的包,配置不同的levelAppender。这里只是引出这个概念,具体的内容放在下文。

配置项详解

<configuration>:logback配置的根标签。它包含三个属性:scanscanPerioddebug

  • scan:当配置文件修改后,将会重新载入。值为truefalse
  • scanPeriod:时间间隔。每隔一段时间检测一次配置文件是否被修改。值可以是6012 second,数字是自定义的,不是非要填6012,如果没有给出时间单位,默认单位是毫秒。当scantrue时,此属性生效。
  • debug:是否打印logback内部日志信息,实时查看logback运行状态。值为truefalse(默认)。

<Appender>:可以理解成负责写日志的工具人。一个Appender就是一个工具人。

<logger> :设置某一个包或具体的类 的日志打印级别,以及指定的Appender(分配打工人)。

<root>:根logger,也是logger的一种,且只有一个level属性。

contextName:每个logger都关联到logger上下文,默认上下文名称为default。但可以使用contextName标签设置成其他名字,用于区分不同应用程序的记录。

property:用来定义变量值的标签,property标签有两个属性,namevalue;其中name的值是变量的名称,value的值时变量定义的值。通过property定义的值会被插入到logger上下文中。定义变量后,可以使“${name}”来使用变量。

Appender的种类:

  • ConsoleAppender:控制台日志。
  • FileAppender:文件日志。
  • RollingFileAppender:滚动文件日志。会在日志文件达到某种条件后,创建新的日志文件继续写入日志。常见的条件是文件的大小,比如设置每个文件大小为2KB时,创建新的文件继续写入,文件名大致为xxx1.log,xxx2.log。

输出格式详解

举个例子:%level | %d{yyyy-MM-dd HH:mm:ss,Asia/Shanghai} | [%thread] | %-4relative | %logger{40}| -- %msg%n

%level:日志级别。

%d{yyyy-MM-dd HH:mm:ss,Asia/Shanghai}:时间。

[%thread]:当前线程。

%-4relative:从程序启动到当前日志记录事件所经过的相对时间。-表示左对齐,4表示4个字符宽度。

%logger{40}:输出日志记录器名称的占位符,其中40是一个可选的参数,用于指定输出的日志记录器名称的最大长度。如果不指定{40}这样的参数,默认会输出完整的日志记录器名称。

%msg:日志消息主体。

%n:换行。

%file:文件名。

%line:行号。

配置文件示例

<?xml version="1.0" encoding="UTF-8"?>
<!--
    scan:当配置文件修改后,将会重新载入。
    scanPeriod:设置检测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。
    debug:为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- 日志文件路径,如果spring配置文件没有对应值,使用默认值 -->
    <springProperty scope="context" name="springFilePath" source="log.path" defaultValue="src/main/resources/log"/>

    <!-- 将日志输出到控制台 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%level | %d{yyyy-MM-dd HH:mm:ss,Asia/Shanghai} | [%thread] | %-4relative | %logger{40}| -- %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 将日志输出到文件 -->
    <!--
        使用轮转日志:日志文件超出一定大小后,会新建一个文件(Rolling)
    -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 设置文件路径 -->
        <file>${springFilePath}/spring.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %thread -- %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 基于时间和大小的滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名 -->
            <fileNamePattern>${springFilePath}/spring.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 单个日志文件最大体积,超出最大值,会新建一个日志文件-->
            <maxFileSize>200MB</maxFileSize>
            <!-- 日志文件保留天数 -->
            <maxHistory>60</maxHistory>
            <!-- 所有日志文件的总体积限制 -->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- root节点时必选节点,用来指定最基础的日志输出级别,只有一个level属性 -->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>

</configuration>

给日志配置颜色

方式一、使用官方默认配置

只需要在xml配置文件里引入配置文件即可。

<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

什么?你问我这个文件去哪里找?根据resource里面的路径,去lib目录的springboot依赖中找。

方式二、自定义颜色配置

使用形如%clr(){red}来给日志标签配置颜色。

要使用%clr,有两种方式:

第一种是引入方式一的默认配置文件,在该文件里面就帮我们引入了%clr

第二种方式就是手动引入%clr,可以参考一下defaults.xml

<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />

%clr支持的颜色:blue、cyan、faint、green、magenta、red、yellow

faint:淡色(控制台默认颜色)

magenta:品红色

这里贴一下我的pattern

%level | %clr(%d{yyyy-MM-dd HH:mm:ss,Asia/Shanghai}){magenta} | [%thread] | %-4relative | %clr(%logger{40}){magenta}| -- %msg%n

那这个时候你就会发现了,这样自定义的话,我的level怎么没有颜色啊。

不要担心,有解决办法的。

这里提供两种解决办法:

第一种可以更改一下logback中,%clr对于level的判断,针对不同level显示不同颜色,但是这个我还不会,所以自行探索。

第二种要用的是%highlight高亮。

使用%highlight给level配置颜色

第一步、新建一个高亮颜色配置类。

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.pattern.color.HighlightingCompositeConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;

import static ch.qos.logback.core.pattern.color.ANSIConstants.*;
import static ch.qos.logback.core.pattern.color.ANSIConstants.DEFAULT_FG;

/**
 * 自定义 %highlight,实现不同日志level不同颜色
 */
public class LevelHighLightColorConfig extends HighlightingCompositeConverter {
    // 这里用的版本是springboot 2.6.13
    // 如果你发现父类中的方法不是getForegroundColorCode,可能是版本差异造成的。
    // 那么需要你对着父类ctrl+左键点击,看看父类是怎么实现的
    // 然后照猫画虎继续修改,核心逻辑就是判断然后返回不同的颜色。
    // 因为作者跟着AI配置的时候就遇到这种情况,也是模仿父类进行修改的。
    @Override
    protected String getForegroundColorCode(ILoggingEvent event) {
        Level level = event.getLevel();
        switch (level.toInt()) {
            case Level.ERROR_INT:
                return RED_FG;
            case Level.WARN_INT:
                return YELLOW_FG;
            case Level.INFO_INT:
                return GREEN_FG;
            default:
                return DEFAULT_FG;
        }
    }
}

第二步、在logback.xml配置文件中引入我们的%highlight

conversionWord的值固定为highlightconverterClass的值为我们上一步写的配置类。

<conversionRule conversionWord="highlight"
                    converterClass="com.yexiao.userCenter.config.LevelHighLightColorConfig" />

第三步、编写pattern

<pattern>%highlight(%level) | %clr(%d{yyyy-MM-dd HH:mm:ss,Asia/Shanghai}){magenta} | [%thread] | %-4relative | %clr(%logger{40}){magenta}| -- %msg%n</pattern>

完整配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!--
    scan:当配置文件修改后,将会重新载入。
    scanPeriod:设置检测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。
    debug:为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <conversionRule conversionWord="highlight"
                    converterClass="com.yexiao.userCenter.config.LevelHighLightColorConfig" />

    <!-- 日志文件路径,如果spring配置文件没有对应值,使用默认值 -->
    <springProperty scope="context" name="springFilePath" source="log.path" defaultValue="src/main/resources/log"/>

    <!-- 将日志输出到控制台 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%highlight(%level) | %clr(%d{yyyy-MM-dd HH:mm:ss,Asia/Shanghai}){magenta} | [%thread] | %-4relative | %clr(%logger{40}){magenta}| -- %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 将日志输出到文件 -->
    <!--
        使用轮转日志:日志文件超出一定大小后,会新建一个文件(Rolling)
    -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 设置文件路径 -->
        <file>${springFilePath}/spring.log</file>
        <!-- 基于时间和大小的滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名 -->
            <fileNamePattern>${springFilePath}/spring.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 单个日志文件最大体积,超出最大值,会新建一个日志文件-->
            <maxFileSize>200MB</maxFileSize>
            <!-- 日志文件保留天数 -->
            <maxHistory>60</maxHistory>
            <!-- 所有日志文件的总体积限制 -->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %thread -- %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

    <!-- root节点时必选节点,用来指定最基础的日志输出级别,只有一个level属性 -->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>

</configuration>1

Tips

1、文件路径配置问题

文件路径有两种方式配置,分别是filepath,或者在xml文件中配置。

注:file和path二者不能同时使用,如若同时使用,则只有logging.file生效
logging.file=文件名
logging.path=日志文件路径
 
logging.level.包名=指定包下的日志级别
logging.pattern.console=日志打印规则
  • logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
  • logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log

注:二者不能同时使用,如若同时使用,则只有logging .file生效,可以看到这种方式配置简单,但是能实现的功能也非常有限,如果想要更复杂的需求,就需要下面的定制化配置了。

2、使用%clr添加颜色,启动报错

完整报错如下:

Exception in thread "main" java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in ch.qos.logback.core.pattern.parser.Compiler@7a362b6b - There is no conversion class registered for composite conversion word [clr]
ERROR in ch.qos.logback.core.pattern.parser.Compiler@7a362b6b - Failed to create converter for [%clr] keyword
ERROR in ch.qos.logback.core.pattern.parser.Compiler@7a362b6b - There is no conversion class registered for composite conversion word [clr]
ERROR in ch.qos.logback.core.pattern.parser.Compiler@7a362b6b - Failed to create converter for [%clr] keyword
	at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:166)
	at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:82)
	at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)
	at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:114)
	at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:264)
	at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:237)
	at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:200)
	at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:173)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:74)
	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:358)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:317)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)
	at com.kaka.jtest.springboot.Application.main(Application.java:24)

解决办法:

没有引入%clr,需要引入默认的配置文件

<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

或手动引入%clr

<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
3、不要在日志文件里面使用颜色输出

使用颜色输出会将颜色转换成ANSI码,不会有颜色,可读性较差。

参考链接

【1】SpringBoot+logback优雅的配置日志

【2】logback官方配置文档