好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

使用springboot logback动态获取application的配置项

springboot logback动态获取application的配置项

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

logback自身支持以下方式配置

?

1

< property name = "USER_HOME" value = "/home/sebastien" />

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

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

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

?

1

< springProperty scope = "context" name = "LOG_HOME" source = "logback.file" />

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

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

<? xml version = "1.0" encoding = "utf-8" ?>

< configuration >

     < contextName >xxx-server</ contextName >

     < property name = "pattern" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n" />

     < property name = "pattern-color" value = "%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n" />

     < define name = "LOG_HOME" class = "com.youzu.dc.dcopsserver.config.LoggerConfig" />

     <!-- 控制台输出 -->

     < appender name = "CONSOLE" class = "ch.qos.logback.core.ConsoleAppender" >

         < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" >

             < pattern >${pattern}</ pattern >

         </ encoder >

     </ appender >

     <!-- 控制台输出-带颜色 -->

     < appender name = "CONSOLE-WITH-COLOR" class = "ch.qos.logback.core.ConsoleAppender" >

         < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" >

             < pattern >${pattern-color}</ pattern >

         </ encoder >

     </ appender >

     <!-- 文件输出 -->

     < appender name = "FILE" class = "ch.qos.logback.core.rolling.RollingFileAppender" >

         < rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" >

             < fileNamePattern >${LOG_HOME}/xxxx.%d.%i.log</ fileNamePattern >

             < timeBasedFileNamingAndTriggeringPolicy class = "ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP" >

                 < maxFileSize >100MB</ maxFileSize >

             </ timeBasedFileNamingAndTriggeringPolicy >

             < maxHistory >30</ maxHistory >

             < totalSizeCap >3GB</ totalSizeCap >

         </ rollingPolicy >

         < encoder >

             < pattern >${pattern}</ pattern >

         </ encoder >

     </ appender >

     < root level = "INFO" >

         < appender-ref ref = "CONSOLE-WITH-COLOR" />

         < appender-ref ref = "FILE" />

     </ root >

</ configuration >

子节点一 appender

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

控制台输出appender

?

1

2

3

4

5

6

< property name = "pattern" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n" />

< appender name = "CONSOLE" class = "ch.qos.logback.core.ConsoleAppender" >

  < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" >

    < pattern >${pattern}</ pattern >

   </ encoder >

</ appender >

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

%d表示时间 %thread表示线程名 %-5level 表示日志级别,允许以五个字符长度输出 %logger{50}表示具体的日志输出者,比如类名,括号内表示长度 %msg表示具体的日志消息,就是logger.info([xxx])中的xxx %n表示换行

文件输入appender

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

例如:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

< property name = "LOG_HOME" value = "logs" />

< property name = "pattern" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n" />

< appender name = "FILE" class = "ch.qos.logback.core.rolling.RollingFileAppender" >

   < rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" >

     < fileNamePattern >${LOG_HOME}/all.%d.%i.log</ fileNamePattern >

     < timeBasedFileNamingAndTriggeringPolicy class = "ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP" >

         < maxFileSize >10MB</ maxFileSize >

     </ timeBasedFileNamingAndTriggeringPolicy >

     < maxHistory >30</ maxHistory >

   </ rollingPolicy >

   < encoder >

     < pattern >${pattern}</ pattern >

     </ encoder >

</ appender >

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

索引从0开始递增

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

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

root节点-启用配置

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

比如:

?

1

2

3

4

< root level = "INFO" >

  < appender-ref ref = "CONSOLE-WITH-COLOR" />

   < appender-ref ref = "FILE" />

</ root >

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

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

动态配置log目录

?

1

2

3

4

5

6

import ch.qos.logback.core.PropertyDefinerBase

class LoggerConfig : PropertyDefinerBase() {

     override fun getPropertyValue(): String {

         return "${ServerConfig.applicationPath}/logs"

     }

}

获取jar目录路径

?

1

2

3

4

5

6

7

/**

  *  获取jar的绝对路径文件夹

  */

fun getApplicationPath(): String {

     val h = ApplicationHome(FileUtils:: class .java)

     return h.source.parentFile.toString()

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持.

原文链接:https://hello.blog.csdn.net/article/details/79122893

查看更多关于使用springboot logback动态获取application的配置项的详细内容...

  阅读:61次