详解日志格式配置:XML 与 Spring Boot 配置文件格式
详解日志格式配置:XML 与 Spring Boot 配置文件格式
日志是现代应用程序中不可或缺的一部分,通过定制化日志格式和颜色,开发人员可以更方便地调试和监控应用。本文将深入讲解如何在 XML 配置文件 和 Spring Boot 配置文件 中设置日志格式,涉及日志内容、颜色、字符数限制等细节。
一、日志格式的基本概念
日志格式定义了每条日志记录的输出样式,常用的格式包括:
- 时间戳:记录日志产生的时间。
- 日志级别:例如
INFO
,DEBUG
,ERROR
。 - 日志记录器:输出日志的类或组件的名称。
- 日志消息:具体的日志内容。
- 方法名称、文件名、行号:用于定位日志发生的代码位置。
- 线程信息:当前执行日志的线程。
这些信息通过不同的占位符来表示,并且可以灵活配置它们的格式、颜色及输出宽度。
二、XML 配置文件中的日志格式
在基于 Logback 的项目中,日志格式通常通过 logback.xml
文件进行配置。Logback 提供了丰富的日志格式控制能力,包括设置颜色、输出字符宽度等。
2.1 配置示例:基础格式
以下是一个基本的日志格式配置,展示了如何在控制台输出日志信息,并定制时间、日志级别、文件名、行号、方法名和日志消息。
<configuration><!-- 定义控制台输出格式 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss} [%file:%line] %M - %msg%n</pattern></encoder></appender><!-- 定义根日志级别 --><root level="info"><appender-ref ref="CONSOLE" /></root>
</configuration>
2.2 配置解析
%d{HH:mm:ss}
:表示时间戳,格式为HH:mm:ss
,仅显示小时、分钟和秒。[%file:%line]
:表示文件名和行号,格式为[文件名:行号]
。例如[MyClass.java:123]
。%M
:表示方法名称,即调用日志的具体方法。- %msg
:表示日志的具体消息内容。%n
:表示换行符。
2.3 配置示例:带颜色和字符限制
Logback 支持使用 ANSI
转义码来为控制台日志添加颜色,并且可以限制输出的字符数。以下是一个更复杂的示例,展示了如何为日志的各个部分添加颜色和设置字符宽度限制。
<configuration><!-- 定义控制台输出格式 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%clr(%d{HH:mm:ss}){faint} <!-- 时间戳:浅色 -->%clr([%file:%line]){magenta} <!-- 文件名和行号:品红色 -->%clr(%M){cyan} <!-- 方法名:青色 -->- %msg%n <!-- 消息内容 --></pattern></encoder></appender><root level="info"><appender-ref ref="CONSOLE" /></root>
</configuration>
2.4 配置解析:颜色与字符数限制
-
%clr(...)
:用于为日志输出部分添加颜色。Logback 支持多种颜色,常用的颜色包括:{faint}
:淡色{magenta}
:品红色{cyan}
:青色{red}
:红色{yellow}
:黄色
-
%d{HH:mm:ss}
:时间戳格式为HH:mm:ss
,并设置为 浅色(faint
)。 -
[%file:%line]
:文件名和行号,使用 品红色(magenta
)。 -
%M
:方法名,使用 青色(cyan
)。 -
%msg
:日志消息内容。
2.5 限制字符数
可以通过限制输出的字符数来规范日志的格式,避免过长的记录影响可读性。
%10.10logger
:将记录器名称限制为 10 个字符,超出部分截断。%40.40logger
:将记录器名称限制为 40 个字符,超出部分截断。%-5level
:日志级别右对齐,占用 5 个字符。
示例:限制字符数与格式化
<configuration><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss} %-5level %logger{40} [%file:%line] %M - %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="CONSOLE" /></root>
</configuration>
2.6 配置输出示例
日志输出的格式会是:
10:30:09 INFO com.example.MyService [MyClass.java:57] loadOpenCV - 当前操作系统: windows 10
三、Spring Boot 配置文件中的日志格式
Spring Boot 提供了更简化的方式来配置日志格式。你可以通过 application.properties
或 application.yml
文件来快速定制控制台日志的输出格式。
3.1 application.properties
配置示例
在 application.properties
文件中配置日志格式:
logging.pattern.console=%d{HH:mm:ss} %-5level %logger{36} [%file:%line] %M - %msg%n
3.2 application.yml
配置示例
在 application.yml
文件中配置日志格式:
logging:pattern:console: "%d{HH:mm:ss} %-5level %logger{36} [%file:%line] %M - %msg%n"
3.3 配置解析
与 Logback 配置的语法类似,Spring Boot 配置文件中也使用类似的占位符:
%d{HH:mm:ss}
:时间戳,显示为HH:mm:ss
格式。%-5level
:日志级别,使用右对齐,宽度为 5 个字符。%logger{36}
:日志记录器名称,最多显示 36 个字符,超出部分会被截断。[%file:%line]
:显示文件名和行号,格式为[文件名:行号]
。%M
:方法名。%msg
:日志消息内容。
3.4 配置输出示例
日志输出格式如下:
10:30:09 INFO com.example.MyService [MyClass.java:57] loadOpenCV - 当前操作系统: windows 10
3.5 配置带颜色的输出(Spring Boot)
Spring Boot 支持使用 ANSI
颜色代码,尽管它不像 Logback 那样具有强大的颜色控制能力,但可以通过 logging.pattern.console
属性设置颜色。
logging.pattern.console=%clr(%d{HH:mm:ss}){faint} %-5level %logger{36} [%file:%line] %M - %msg%n
配置解析
%clr(...){faint}
:为时间戳部分设置颜色为淡色(浅灰色)。- 其他部分如日志级别、记录器名称、文件名等采用默认颜色。
四、常见日志格式占位符与颜色
占位符 | 说明 | 示例输出 |
---|---|---|
%d{HH:mm:ss} | 时间戳,格式为小时:分钟:秒 | 10:30:09 |
%level | 日志级别 | INFO , DEBUG , ERROR |
%logger{36} | 日志记录器名称,限制为 36 个字符 | com.example.MyClass |
%file | 文件名 | MyClass.java |
%line | 行号 | 57 |
%M | 方法名称 | loadOpenCV |
%msg | 日志消息内容 | 当前操作系统:windows 10 |
%n | 换行符 | |
%clr(...) | 颜色控制(如淡色、红 |
色、绿色、青色等) | 例如 %clr(%d{HH:mm:ss}){faint}
|
| %logger{10}
| 限制记录器名称为 10 个字符 | com.examp...
|
五、总结与最佳实践
-
颜色和格式:
- 使用
Logback
提供的ANSI
转义码,可以轻松为日志输出添加颜色,帮助开发人员快速定位问题。 - 日志格式中可以控制时间戳、日志级别、记录器、消息内容等部分的颜色,使日志更具可读性。
- 使用
-
字符数限制:
- 通过限制字段长度(如
%logger{36}
或%M{10}
),可以避免日志输出过长,影响日志的整洁性。
- 通过限制字段长度(如
-
适用场景:
logback.xml
更适用于复杂的日志配置和多种输出形式(如文件、控制台)。application.properties
和application.yml
提供简单而有效的方式来配置 Spring Boot 项目的日志格式。
通过合理配置日志格式,开发人员可以大大提高日志的可读性和可维护性,有效帮助项目的调试与运维。
相关文章:
详解日志格式配置:XML 与 Spring Boot 配置文件格式
详解日志格式配置:XML 与 Spring Boot 配置文件格式 日志是现代应用程序中不可或缺的一部分,通过定制化日志格式和颜色,开发人员可以更方便地调试和监控应用。本文将深入讲解如何在 XML 配置文件 和 Spring Boot 配置文件 中设置日志格式&am…...
JDK21新特性
目录 虚拟线程(JEP 444): 顺序集合(JEP 431): 字符串模板(JEP 430): 模式匹配的增强(JEP 440、441以及443): 结构化并发和作用域值…...
SqlDataAdapter
SqlDataAdapter 是 .NET Framework 和 .NET Core 中提供的一个数据适配器类,属于 System.Data.SqlClient 命名空间(或在 .NET 6 中属于 Microsoft.Data.SqlClient 命名空间)。它的作用是充当数据源(如 SQL Server 数据库ÿ…...

AI赋能:构建安全可信的智能电子档案库
在档案的政策与法规上,《中华人民共和国档案法》2020年修订新增,对电子档案的合法要件、地位和作用、安全管理要求和信息化系统建设等方面作出了明确规定,保障数字资源的安全保存和有效利用。 日前,国家档案局令第22号公布《电子…...

分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测
分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测 目录 分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-PNN粒子群优化概率神经网络多特征分类预测,运行环境Matlab2018b及以…...
AcWing 3416. 时间显示
文章目录 前言代码思路 前言 这种我最担心的就是一些语法格式忘掉了。还有 int ,long long 的数据范围我记得不是很清楚,印象中 int 是 20 亿左右,long long 不行就得用数组来存这个数字了。int,long long数据类型及数值范围。好像没记错,记…...
【软考速通笔记】系统架构设计师⑲——专业英语
文章目录 一、前言二、常用名词三、架构风格四、非功能需求五、应用架构六、软件架构重用 一、前言 笔记目录大纲请查阅:【软考速通笔记】系统架构设计师——导读 二、常用名词 名词翻译architecture架构system系统design设计requirements需求components组件constr…...

java注解(二):注解的解析以及应用场景、用注解和反射模拟junit框架代码演示
目录 1、什么是注解的解析? 2、解析注解的案例 1、自定义一个注解 2、在类和方法上使用自己定义的注解 3、解析注解 3、模拟Junit框架案例 1、自定义一个MyTest注解 2、定义一个测试类,使用自定义的注解 3、写一个启动类 本文章主要讲解什么是注…...

C# 命名空间(Namespace)
文章目录 前言一、命名空间的定义与使用基础(一)定义语法与规则(二)调用命名空间内元素 二、using 关键字三、嵌套命名空间 前言 命名空间(Namespace)在于提供一种清晰、高效的方式,将一组名称与…...

几个Linux系统安装体验: centos7系统服务版
本文介绍CentOS7服务版本的安装。 前言 当前国产操作系统版本众多,但根据笔者多年的实践经验得到的认知,最好能抓住底层逻辑,上下打通打透,拉齐表现和本质,就能在纷扰版本中看得清清楚楚,明明白白…...
ViT学习笔记(一) 基本的原理和框架结构
原论文地址:https://arxiv.org/pdf/2010.11929 首先大致通读一下原论文,这是很有必要的,但不必完全读懂,因为会有高手给我们解读,比如: 【Transformer系列】深入浅出理解ViT(Vision Transformer)模型-CSD…...

fedora下Jetbrains系列IDE窗口中文乱码解决方法
可以看到窗口右部分的中文内容为小方块。 进入 Settings - Appearance & Behavior - Appearance - Use custom font : Note Sans Mono CJK SC ,设置后如下图:...
nginx根据报文里字段转发至不同地址
nginx接收到post请求.请求报文里是一个json字符串,字符串里有个字段id。 根据id不同,转发到不同地址。 如果idaaa,转发到www.aaa.com.test 如果idbbb,转发到www.bbb.com.test 如何配置,请提供一个nginx.conf 要在 Nginx 中根据 POST 请求的 JSON 负载中的…...
使用 html/css 实现 educoder 顶部导航栏的步骤和方法
要使用HTML和CSS实现一个类似于Educoder网站的顶部导航栏,我们可以设计一个响应式、简洁且功能齐全的导航栏。Educoder的顶部导航栏通常包括网站的logo、主要导航项(如首页、课程、讨论等)、以及用户操作按钮(如登录、注册等&…...
EasyExcel导出列表
通过easyexcel导出列表数据 根据列表内容自适应宽高。 文件名冲突,修改文件名递增设置。 依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version&…...

【unity小技巧】分享vscode如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)
文章目录 前言一、前置条件1、已安装Visual Studio Code,并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号],2、在Visual Studio Code扩展中搜索Unity,并安装3、同时注意这个插件下面的描述,需要根…...

【JavaScript】Object.keys() 和 Object.values() 的使用示例和相关的简单应用
值是数字的情况: let n 124; Object.keys(n) // [] Object.values(n) // []值是字符串的情况: let s "abc"; Object.keys(s) // [0, 1, 2] Object.values(s) // [a, b, c]值是数组的情况:(常用) let ar…...

SwiftUI 列表(或 Form)子项中的 Picker 引起导航无法跳转的原因及解决
概述 在 SwiftUI 的界面布局中,列表(List)和 Form 是我们秃头码农们司空见惯的选择。不过大家是否知道:如果将 Picker 之类的视图嵌入到列表或 Form 的子项中会导致导航操作无法被触发。 从上图可以看到:当在 List 的…...

基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯
基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯 1. 实验要求2. 功能分析3. 模块设计4. 波形图5.代码编写6. 代码仿真7. 添加约束文件并分析综合 上期内容,我们学习了按键控制蜂鸣器,这一期我们开始学习呼吸灯 1. 实验要求 控制领航者核心板上的led&#x…...

探索 Python 应用的分层依赖:解决 UOS 环境中的 libvirt-python 安装问题
探索 Python 应用的分层依赖:解决 UOS 环境中的 libvirt-python 安装问题 背景Python 版本升级 问题描述原因分析与解决方案 Python 应用的分层依赖:安装与部署的视角libvirt-python的分层依赖尝试的解决方案 使用编译好的 .whl 文件"嫁接"整个…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...