论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
SQL-Server
›
SpringBoot 项目中设置日记体系文件 logback-spring.xml ...
SpringBoot 项目中设置日记体系文件 logback-spring.xml 原理和用法介绍 ...
东湖之滨
论坛元老
|
2025-1-18 15:05:40
|
显示全部楼层
|
阅读模式
楼主
主题
1745
|
帖子
1745
|
积分
5239
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
在 Spring Boot 项目中,logback-spring.xml 是用于设置日记体系的文件,是基于 Logback 框架,重要有以下几点功能:
1、日记输出控制
可以指定哪些类或包的日记信息应该被输出,以及输出的日记级别。
例如,可以将某些关键业务类的日记级别设置为 DEBUG,以便在开辟和测试阶段进行具体的日记记录,方便调试。
将一些基础类或库的日记级别设置为 INFO 或 WARN,避免日记信息过多造成干扰。
<logger name="com.example.business" level="DEBUG"/>
<logger name="org.springframework" level="INFO"/>
复制代码
这里,com.example.business 包下的日记将以 DEBUG 级别输出,而 org.springframework 包下的日记以 INFO 级别输出。
2、日记格式设置
可以自定义日记的输出格式,包括时间戳、日记级别、线程名、类名、日记消息等元素的排列顺序和格式。
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
复制代码
上述代码利用 %d 表现时间戳,%thread 表现线程名,%-5level 表现日记级别,%logger{36} 表现日记记录器名称,%msg%n 表现日记消息和换行符。
3、日记输出位置
可以将日记输出到差异的目的地,常见的有控制台和文件。
<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.FileAppender">
<file>/log/info/info.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
复制代码
上述代码中,CONSOLE 是一个将日记输出到控制台的 Appender,利用了前面定义的日记格式;FILE 是一个将日记输出到文件 /log/info/info.log 的 Appender。
4、日记滚动计谋
对于输出到文件的日记,可以设置日记滚动计谋,以避免日记文件过大。
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/log/info/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/log/info/info-%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
复制代码
上述代码利用 TimeBasedRollingPolicy 实现了基于时间的日记滚动,天天会天生一个新的日记文件,文件名为 /log/info/info-%d{yyyy-MM-dd}.log。
5、日记级别调整
可以根据差异的情况(如开辟、测试、生产)动态调整日记级别。
<springProfile name="dev">
<logger name="com.wen" level="DEBUG"/>
</springProfile>
<springProfile name="prod">
<logger name="com.wen" level="INFO"/>
</springProfile>
复制代码
这里利用了 Spring Boot 的 springProfile 特性,在 dev 情况下将 com.wen 包的日记级别设置为 DEBUG,在 prod 情况下设置为 INFO。
6、日记条件过滤
可以对日记信息进行过滤,只输出符合特定条件的日记。
<appender name="FILTERED_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
复制代码
上述代码利用 ThresholdFilter 过滤掉级别低于 INFO 的日记,只有 INFO 及以上级别的日记会被输出到控制台。
7、利用注意事项
1、日记文件所带来的优势:
机动性:可以根据项目的具体需求,机动设置日记输出,满意差异阶段(开辟、测试、生产)和差异场景下的日记需求。
性能优化:通过公道设置日记级别和输出目的地,可以避免不必要的日记输出,进步性能。
可维护性:集中管理日记设置,便于维护和修改,避免在代码中硬编码日记相干的逻辑。
2、设置文件的加载顺序:
Spring Boot 在启动时会主动查找并加载 logback-spring.xml 文件,如果找不到,会实验加载 logback.xml 文件。发起利用 logback-spring.xml,由于它支持 Spring 的一些特别设置,如 springProfile,可以根据差异的情况进行差异的日记设置。
设置文件中的文件路径必要根据现实情况进行调整,确保日记文件的存储位置具有足够的权限。
差异的 Appender 可以组合利用,如同时输出到控制台和文件。
对于复杂的日记设置,可以考虑将差异部门拆分成多个 <appender> 和 <logger>,以便于维护和管理。
8、完备示例代码
下面代码是一个项目的完备示例代码,利用了上述的一些情况,可用作常见的 SpringBoot 项目。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="log.level" value="debug" />
<property name="log.maxHistory" value="30" />
<property name="log.filePath" value="log/project/" />
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss:SSS} | [%thread] | [%X{request-id}] | %-5level | %class.%M %L | %msg%n" />
<!-- 打印到控制台 -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- INFO -->
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.filePath}/info/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${log.filePath}/info/info-%d{yyyy-MM-dd}.log
</fileNamePattern>
<!-- 文件最大历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
<!-- 下面这俩可不定义 -->
<maxFileSize>1GB</maxFileSize>
<totalSizeCap>128GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- DEBUG -->
<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.filePath}/debug/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.filePath}/debug/%d{yyyy-MM-dd}.log
</fileNamePattern>
<maxHistory>${log.maxHistory}</maxHistory>
<maxFileSize>1GB</maxFileSize>
<totalSizeCap>128GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
</appender>
<!-- ERROR -->
<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/error/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${log.filePath}/error/error-%d{yyyy-MM-dd}.log
</fileNamePattern>
<!-- 文件最大历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
<maxFileSize>1GB</maxFileSize>
<totalSizeCap>128GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<logger name="org.redisson" level="info" additivity="false" />
<root level="INFO">
<appender-ref ref="consoleAppender" />
<appender-ref ref="debugAppender" />
<appender-ref ref="infoAppender" />
<appender-ref ref="errorAppender" />
</root>
</configuration>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
东湖之滨
论坛元老
这个人很懒什么都没写!
楼主热帖
《HarmonyOS开发 - 小凌派-RK2206开发 ...
dotnet 6 为什么网络请求不跟随系统网 ...
从0到1实现一套CICD流程之CD
大二C#实现酒店管理系统(C端展示、前 ...
VMware虚拟机安装黑群晖7.1
当我们在聊「开源大数据调度系统Taier ...
ABP Framework 7.0 RC 新增功能简介 ...
RequestDispatcher具有什么功能呢? ...
函数返回值,静态动态数组
测试大姐提了个bug,为什么你多了个opti ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
Oracle
程序人生
Mysql
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表