springboot logback相关问题总结

443 阅读1分钟

最近做了一个与logback相关的功能,遇到了不少坑,所以总结归纳下,希望有人能从中找到答案解决自己的疑惑

当在yaml文件中有logging.config配置来指定日志配置文件,且resources目录下又有logback.xml时

  • 举个例子当我在spring-logging.xml中设置了logging.config="D://logbackTest.xml",且resources目录下有logback.xml时,此时还是会优先加载logback.xml。
  • logback.xml的加载要早于Application.yaml的加载,所以logback.xml中springProperty设置的变量是无法加载的
  • 要想加载springProperty设置的变量,可以将logback.xml改成logback-Spring.xml。

当我们在logback配置文件中配置了scanPeriod属性

  • 这里scanPeriod设为10秒,意味着每10秒会去检测该文件是否改变,如果有改变则重新加载文件, 然后检测的时候是通过文件最后修改时间来判断该文件是否修改的。
  • 重点重点重点,当logback配置修改了,要重新加载文件的时候,logback文件中的SpringProperty标签里的变量是不会再被yaml配置文件里对应值赋值 。 举个例子我在SpringProperty里设置了个变量applicationName,对应的值来源于yaml文件中application.name的配置值,此时yaml文件中application.name的值为"testBoot",但我们在应用运行过程中修改了logback配置文件时,然后会重新加载logback配置文件,此时applicationName的值会是is_undefined,而不是"testBoot"。
  • (上述原因可能需要看源码,由于目前看源码较少,还不知怎么入手,还希望有大佬可以指点下)