使用springboot logback动态获取application的配置项代码示例

作者:袖梨 2022-06-29

本篇文章小编给大家分享一下使用springboot logback动态获取application的配置项代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。

在多环境的情况下,logback的日志路径需要进行针对性配置,也就是需要通过application.yml文件中进行配置。

logback自身支持以下方式配置

但是怎样才能灵活的配置“/home/sebastien”参数呢,如果不同的环境此参数值不同,那么就需要通过application.yml文件的配置项进行指定。

但是logback.xml加载早于application.yml,如果直接通过${参数key}的形式获取是无法获取到对应参数值的。

因此只能使用spring提供的标签来对此参数进行配置

对照上面的配置,其中property替换成了springProperty标签。两个配置属性name效果是一样的,只不过后者的source指向了application.yml文件中的key。注意此处不需要${}形式获取。

springboot logback配置及动态配置log目录



    xxx-server
    
    
    
    
    
        
            ${pattern}
        
    
    
    
        
            ${pattern-color}
        
    
    
    
        
            ${LOG_HOME}/xxxx.%d.%i.log
            
                100MB
            
            30
            3GB
        
        
            ${pattern}
        
    
    
        
        
    

子节点一 appender

appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。

控制台输出appender



 
   ${pattern}
  

encoder表示输出格式,具体说明如下:

%d表示时间

%thread表示线程名

%-5level 表示日志级别,允许以五个字符长度输出

%logger{50}表示具体的日志输出者,比如类名,括号内表示长度

%msg表示具体的日志消息,就是logger.info(“xxx”)中的xxx

%n表示换行

文件输入appender

文件输出主要包括配置:以指定格式将日志输出到指定文件夹下的文件中,可以配置该文件的名称、最大大小、保存时间

例如:




  
    ${LOG_HOME}/all.%d.%i.log
    
    	10MB
    
    30
  
  
    ${pattern}
    

上述配置的主要内容是:以指定的格式向logs文件下的文件输出日志,文件名称格式被指定为logs/all.日期.索引号.log,日志文件最大大小为10MB,超出则创建新文件,日志文件保留三十天

索引从0开始递增

rollingPolicy指滚动粗略,具体配置如上。

关于日志文件大小限制也可以使用1GB配置。

root节点-启用配置

root节点实际上是配置启用哪种appender,可以添加多个appender。

比如:


 
  

表示level为info级别,启用渲染器CONSOLE-WITH-COLOR和FILE。

按照这样配置,输出日志时,控制台会按照CONSOLE定义的格式输出,而日志文件会按照CONSOLE-WITH-COLOR的配置去输出。

动态配置log目录

import ch.qos.logback.core.PropertyDefinerBase
class LoggerConfig : PropertyDefinerBase() {
    override fun getPropertyValue(): String {
        return "${ServerConfig.applicationPath}/logs"
    }
}

获取jar目录路径

/**
 *  获取jar的绝对路径文件夹
 */
fun getApplicationPath(): String {
    val h = ApplicationHome(FileUtils::class.java)
    return h.source.parentFile.toString()
}

相关文章

精彩推荐