好得很程序员自学网

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

SpringBoot项目读取外置logback配置文件的问题及解决

SpringBoot读取外置logback配置文件

springboot项目可以读取外置配置文件,避免了修改配置文件需要重新打包部署的问题。

部署项目的时候可以 在jar包同一目录下新建了config文件夹 ,将所有的配置文件都放在config文件夹下统一管理,springboot会 优先读取jar包同一目录下config目录下的配置文件 。

下次需要修改配置文件内容就直接在config目录下修改,然后重启项目即可。

问题

启动jar包,却出现了问题: springboot读取的logback-spring.xml还是项目内置的,并没有读取外置的config目录下的logback-spring.xml 。经过测试,发现其他配置文件如application.yml的读取都是没问题的,就只有logback配置文件读取没有按预想来。

解决

猜想是因为springboot 默认读取的就是项目的resources目录下的logback配置文件 。

所以解决思路是 在启动jar包命令中指定logback配置文件路径:

?

1

java -jar -Dlogging.config=./config/logback-spring.xml datasync-web.jar

这样启动jar包即可读取config目录下的logback-spring.xml了。

SpringBoot Logback的使用

springboot引入logback jar以后,自动的会在资源根目录找logback.xml 或 logback-spring.xml文件。

标签定义

configuration 属性 作用
scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为
truescanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

property

和redis的key和value的作用相同。

属性 作用
name 变量的名称
value 变量的值
appender

用来格式化日志输出节点。

字段 类型 作用
name 属性 定义名称,方便root引用这个输出策略
class 属性 指定哪种输出策略,常用就是控制台输出策略和文件输出策略
layout 节点 控制台输出使用
encode 节点 文件输出使用
loger

设置某一个包或某一个类的日志打印级别。

属性 作用
name 用来指定受此loger约束的某一个包或者具体的某一个类
level 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
addtivity 是否向上级loger传递打印信息。默认是true。
root

必选节点,用来指定最基础的日志输出级别,只有一个level属性用来设置打印级别,只会输出>=level级别的日志。

日志级别,从低到高TRACE > DEBUG > INFO > WARN > ERROR > FATAL。

yml设置打印级别

设置只打印com.spring.logback包下info级别的日志。

?

1

2

3

logging:

   level:

     com.spring.logback: info

示例

?

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

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

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

     <!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,

     所以我们使用下面的策略,可以避免输出 Error 的日志-->

     < filter class = "ch.qos.logback.classic.filter.LevelFilter" >

         <!--过滤 Error-->

         < level >ERROR</ level >

         <!--匹配到就禁止-->

         < onMatch >DENY</ onMatch >

         <!--没有匹配到就允许-->

         < onMismatch >ACCEPT</ onMismatch >

     </ filter >

     <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则

         如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天

         的日志改名为今天的日期。即,<File> 的日志都是当天的。

     -->

     < File >${logback.logdir}/info.${logback.appname}.log</ File >

     <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->

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

         <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->

         < FileNamePattern >${logback.logdir}/info.${logback.appname}.%d{yyyy-MM-dd}.log</ FileNamePattern >

         <!--只保留最近90天的日志-->

         < maxHistory >90</ maxHistory >

         <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->

         <!--<totalSizeCap>1GB</totalSizeCap>-->

     </ rollingPolicy >

     <!--日志输出编码格式化-->

     < encoder >

         < charset >UTF-8</ charset >

         < pattern >%d [%thread] %-5level %logger{36} %line - %msg%n</ pattern >

     </ encoder >

</ appender >

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

     <!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->

     < filter class = "ch.qos.logback.classic.filter.ThresholdFilter" >

         < level >Error</ level >

     </ filter >

     <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则

         如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天

         的日志改名为今天的日期。即,<File> 的日志都是当天的。

     -->

     < File >${logback.logdir}/error.${logback.appname}.log</ File >

     <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->

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

         <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->

         < FileNamePattern >${logback.logdir}/error.${logback.appname}.%d{yyyy-MM-dd}.log</ FileNamePattern >

         <!--只保留最近90天的日志-->

         < maxHistory >90</ maxHistory >

         <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->

         <!--<totalSizeCap>1GB</totalSizeCap>-->

     </ rollingPolicy >

     <!--日志输出编码格式化-->

     < encoder >

         < charset >UTF-8</ charset >

         < pattern >%d [%thread] %-5level %logger{36} %line - %msg%n</ pattern >

     </ encoder >

</ appender >

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

原文链接:https://blog.csdn.net/egegerhn/article/details/124042845

查看更多关于SpringBoot项目读取外置logback配置文件的问题及解决的详细内容...

  阅读:29次