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

作者:egegerhn 时间:2023-06-06 10:50:22 

SpringBoot读取外置logback配置文件

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

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

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

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

问题

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

解决

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

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

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级别的日志。

logging:
 level:
   com.spring.logback: info

示例

<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,配置文件
0
投稿

猜你喜欢

  • mybatis-plus update更新操作的三种方式(小结)

    2023-10-08 14:05:08
  • C#文件操作的简单实例

    2021-12-14 16:50:40
  • C++日期类计算器的模拟实现举例详解

    2023-05-22 08:27:16
  • Android自定义控件ViewGroup实现标签云(四)

    2021-11-30 14:58:36
  • Android 嵌套Fragment的使用实例代码

    2022-07-18 06:37:15
  • C#中实现网段扫描的代码

    2022-05-09 03:54:33
  • Java构建高效结果缓存方法示例

    2021-11-12 03:52:06
  • Java String类的常用方法汇总

    2022-04-10 11:58:24
  • Java中Thread类详解及常用的方法

    2022-09-29 11:35:44
  • Java C++题解leetcode 1684统计一致字符串的数目示例

    2023-04-23 09:06:31
  • Maven工程pom中如何定义jdk版本

    2022-02-18 08:16:13
  • winform中的ListBox和ComboBox绑定数据用法实例

    2023-09-24 05:02:13
  • 通过springboot+mybatis+druid配置动态数据源

    2023-06-20 16:48:30
  • 10分钟学会VS NuGet包私有化部署

    2022-04-23 02:28:31
  • java.lang.Runtime.exec() Payload知识点详解

    2023-11-30 09:56:10
  • http协议进阶之Transfer-Encoding和HttpCore实现详解

    2023-11-03 14:22:05
  • SpringBoot之导入静态资源详解

    2021-06-22 05:01:30
  • 新浪微博第三方登录界面上下拉伸图片之第三方开源PullToZoomListViewEx(二)

    2021-07-25 04:52:35
  • Java多线程编程之ThreadLocal线程范围内的共享变量

    2022-03-10 00:41:05
  • java多次嵌套循环查询数据库导致代码中数据处理慢的解决

    2023-10-28 22:17:50
  • asp之家 软件编程 m.aspxhome.com