作者:石臻臻, CSDN博客之星Top5、Kafka Contributor 、nacos 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中)