栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

logback出现大量XXX

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

logback出现大量XXX

前言

在spring boot中采用logback将日志打印到文件时,你是否遇到过文件名为XXX_IS_UNDEFINED的情况,今天带大家一块分析解决这个问题。


一、logback中spring属性读取

示例配置:



    
    
    
    
    
   
        ${LOG_FILE}
        
            
            ${LOG_FILE}-%d{yyyy-MM-dd}.%i.gz
            
            100MB
            
            30
            5GB
            true
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n
            utf8
        
    

说明:
在logback配置文件中如果需要读取spring配置属性,需要采用如下方式:

 

其中:
springProperty标签说明引用的是spring上下文中的配置属性。
source 对应spring上下文中配置属性的名称
name 属性是logback环境中对引用变量的重命名,方便引用。
采用${springAppName}方式引用变量:


二、问题分析

出现XXX_IS_UNDEFINED这样的情况,意味着没有读到spring的配置属性。
这时一般要检查:
1、logback的xml配置文件有没有被读取到。
2、检索spring上下文中是否有引用的配置属性。
3、logback的xml配置文件的读取顺序。
特别是在引入了配置中心后,很容易出现logback.xml配置文件在读取配置中心属性之前被加载,导致出现很多引用的变量不能识别的问题。

经过分析:
在我的spring boot项目中是由于引入了注册中心的,logback的xml配置文件比spring属性文件先加载,所以读取不到spring.application.name

三、解决方案 方案一:将logback引用的变量放到bootstrap.yml中

使用过spring cloud的都知道,spring boot项目启动会最优先加载bootstrap.yml属性文件,
这样可以保证读取logback.xml时引用的属性已经在spring boot上下文中存在。

弊端:
logback引用的属性是放在配置中心中,就不能使用这种方式了。

方案二:将logback.xml配置文件名改为:logback-spring.xml

因为logback.xml的加载顺序早于springboot的application.yml配置文件当然读不到application.yml文件中的值了。

加载优先级为:
logback.xml--->application.properties--->logback-spring.xml

logback.xml加载早于application.properties,

所以如果你在logback.xml使用了变量时,而恰好这个变量是写在application.properties时,那么就会获取不到,只要改成logback-spring.xml就可以解决。

官网的说明如下:

弊端:
在引入配置中心后,还是会临时出现XXX_IS_UNDEFINED的问题。

方案三:通过logging.config属性指定logback配置文件

具体步骤:
1、重命名logback配置文件:logback-custom.xml,这里名称可以自定义。
2、在application.properties中指定logback的配置文件:

#日志配置
logging.config=classpath:logback-custom.xml

这种方式是最推荐的,无论是否引入配置中心,都能保证先加载配置属性,后读取logback配置文件,保证logback配置文件中能正确引入spring上下文的配置属性。


总结

本文主要分析了使用logback打印日志时出现大量XXX_IS_UNDEFINED日志文件的问题的原因,并提供了对应的解决方案。
1、注意logback中引用spring配置属性的方法
2、注意bootstrap.properties--->application.properties的加载顺序
3、注意logback.xml--->application.properties--->logback-spring.xml的加载顺序
4、通过logging.config属性指定logback配置文件,保证logback配置文件在spring属性文件之后加载。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/324814.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号