【Log日志】logback.xml动态配置属性值(包括接入的第三方配置)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1如何动态配置Logback的存放路径我们在开发过程中,会使用到logback.xml 配置来管理日志文件; 比如

作者石臻臻, CSDN博客之星Top5Kafka Contributornacos Contributor华为云 MVP ,腾讯云TVP, 滴滴Kafka技术专家KnowStreaming


KnowStreaming  是滴滴开源的Kafka运维管控平台, 有兴趣一起参与参与开发的同学,但是怕自己能力不够的同学,可以联系我,当你导师带你参与开源!

1如何动态配置Logback的存放路径

我们在开发过程中,会使用到logback.xml 配置来管理日志文件; 比如

<appender name="common" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>${log.path}/common.log</file>
  <append>true</append>
  <encoder>
   <pattern>%d{yyyy-MM-dd HH:mm:ss} %c{1} %L [%p] %m%n %caller{0}</pattern>
  </encoder>
  <filter class="ch.qos.logback.classic.filter.LevelFilter">
   <level>INFO</level>
   <onMatch>ACCEPT</onMatch>
   <onMismatch>DENY</onMismatch>
  </filter>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   <fileNamePattern>${log.path}/common.log.%d{yyyy-MM-dd}</fileNamePattern>
   <maxHistory>3</maxHistory>
  </rollingPolicy>
 </appender> 

其中log.path是我们定义的文件路径; 那么我们又不想把这个值写死在代码里面; 并且如果能放在配置管理里面(例如nacos)那就更好不过了;

那么应该怎么做呢?

如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <!-- %p级别 %m消息 %c.%M包+方法 %F:%L文件+行 -->
 <!--<property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} | %p | %m | %c.%M | %F:%L %n"/>-->
 <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} >>> %msg%n"/>
 <!-- 获取Environment中的值-->
 <springProperty scope="context" name="log.path" source="log.path"/>
 <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
  <encoder charset="UTF-8">
   <pattern>${pattern}</pattern>
  </encoder>
 </appender>
 <appender name="common" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>${log.path}/common.log</file>
  <append>true</append>
  <encoder>
   <pattern>%d{yyyy-MM-dd HH:mm:ss} %c{1} %L [%p] %m%n %caller{0}</pattern>
  </encoder>
  <filter class="ch.qos.logback.classic.filter.LevelFilter">
   <level>INFO</level>
   <onMatch>ACCEPT</onMatch>
   <onMismatch>DENY</onMismatch>
  </filter>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   <fileNamePattern>${log.path}/common.log.%d{yyyy-MM-dd}</fileNamePattern>
   <maxHistory>3</maxHistory>
  </rollingPolicy>
 </appender>
</configuration>

其中最重要的一段代码是

<!-- 获取Environment中的值-->
 <springProperty scope="context" name="log.path" source="log.path"/>

这个是从spring容器中获取属性值; 只有这个属性已经被加载到了Environment中就可以读取到;

还有就是非常重要的一点是 文件的命名是logback-spring.xml; 如果命名为 logback-spring.xml会读取不到naocs等配置管理中间件的属性值的;为啥要改成logback-spring.xml参考链接

最主要的就是加载时机的问题

application.yml 中的配置/或者nacos中的配置

## 自定义日志文件存储位置
log:
  path: /Users/xxxx/logs

怎么接入Nacos 使用Nacos简化SpringBoot配置(所有配置放入到Nacos中)


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6天前
|
SQL 存储 JSON
更快更强,SLS 推出高性能 SPL 日志查询模式
从海量的日志数据中,按照各种灵活的条件进行即时查询搜索,是可观测场景下的基本需求。本文介绍了 SLS 新推出的高性能 SPL 日志查询模式,支持 Unix 风格级联管道式语法,以及各种丰富的 SQL 处理函数。同时通过计算下推、向量化计算等优化,使得 SPL 查询可以在数秒内处理亿级数据,并支持 SPL 过滤结果分布图、随机翻页等特性。
241 66
|
5天前
|
数据采集 监控 数据安全/隐私保护
掌握Selenium爬虫的日志管理:调整–log-level选项的用法
在Selenium Web数据采集时,日志管理至关重要。通过调整`–log-level`参数可优化日志详细度,如设置为`INFO`记录一般操作信息。结合代理IP、Cookie及user-agent配置,不仅能提高采集成功率,还能规避反爬机制。合理选择日志级别有助于调试与性能平衡,在复杂的数据采集任务中保持程序稳定与可控。
掌握Selenium爬虫的日志管理:调整–log-level选项的用法
|
3天前
|
XML Java Maven
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
这篇文章是Spring5框架的入门到实战教程,介绍了Spring5的新功能——整合日志框架Log4j2,包括Spring5对日志框架的通用封装、如何在项目中引入Log4j2、编写Log4j2的XML配置文件,并通过测试类展示了如何使用Log4j2进行日志记录。
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
|
8天前
|
Java 应用服务中间件
SpringBoot 记录 access.log 日志
SpringBoot 记录 access.log 日志
18 0
SpringBoot 记录 access.log 日志
|
4天前
|
存储 Kubernetes Java
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
|
4天前
|
弹性计算 监控 索引
阿里泛日志设计与实践问题之SLS Scan服务的稳定性和可用性如何保证
阿里泛日志设计与实践问题之SLS Scan服务的稳定性和可用性如何保证
|
4天前
|
存储 SQL JSON
阿里泛日志设计与实践问题之SLS Scan的语法该如何定义
阿里泛日志设计与实践问题之SLS Scan的语法该如何定义
|
6天前
|
应用服务中间件 Linux nginx
Nginx log 日志文件较大,按日期生成 实现日志的切割
Nginx log 日志文件较大,按日期生成 实现日志的切割
27 0
|
6天前
|
Java
Intellij IDEA 显示 access.log 日志
Intellij IDEA 显示 access.log 日志
4 0
|
12天前
|
安全 API 数据库
OceanBase数据库clog日志,删前请三思!一不小心可能引发数据灾难,快来了解正确的日志管理之道!
【8月更文挑战第7天】ModelScope(魔搭)作为开放的模型即服务平台,提供丰富的预训练模型。访问令牌在此类平台中至关重要,用于验证用户身份并授权访问特定模型或服务。本文介绍访问令牌的概念、获取方法及使用示例,强调安全性与有效期内的使用,并简述刷新令牌机制。掌握这些知识可帮助用户安全高效地利用ModelScope的资源。
31 0