欢迎光临

我们一直在努力
当前位置:首页 > 编程技术 >

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

日期:
后台-插件-广告管理-首页/栏目/内容广告位一(PC)
后台-插件-广告管理-首页/栏目/内容广告位一(手机)
目录
  • SpringBoot读取外置logback配置文件
    • 问题
    • 解决
  • SpringBoot Logback的使用
    • 标签定义

SpringBoot读取外置logback配置文件

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

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

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

问题

启动jar包,却出现了问题:springyDBcJQboot读取的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">
        <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
        <Fi[!--empirenews.page--]编程leNamePattern>${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 %loggpythoner{36} %line - %msg%n</pattern>
    </encoder>
</appender>

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

后台-插件-广告管理-首页/栏目/内容广告位二(PC)
后台-插件-广告管理-首页/栏目/内容广告位二(手机)
后台-插件-广告管理-内容广告位三(PC)
后台-插件-广告管理-内容广告位三(手机)

相关阅读

  • 一个简单的SpringBoot项目快速搭建详细步骤

  • 目录前言第一步新建项目第二步导入依赖第三步配置Application第四步创建需要的mapper、service、cotroller层创建需要的文件夹创建数据库创建pojo类创建mapper接口创建对于m
  • 用IDEA创建SpringBoot项目的详细步骤记录

  • 目录前言一、android网站方式创建 二、IDEA方式创建总结前言
    一般来说,用IDEA创建SpringBoot项目有两种方式。其一是Spring官网提供了一个快速生成SpringBoot项目的网站,可以
  • Springboot项目异常处理及返回结果统一

  • 目录背景返回结果定义异常的定义异常的处理返回结果的处理完整代码使用示例背景
    在创建项目的初期,我们需要规范后端返回的数据结构,以便更好地与前端开发人员合作。
    比如后端
  • IntelliJ IDEA运行SpringBoot项目的详细步骤

  • 目录步骤一:配置maven步骤二:配置JDK环境步骤三:检查数据库的配置步骤四:数据库连接本篇超级详细案例截图教学 IDEA如何运行SpringBoot项目,图片点击可放大仔细看
    Java编译工具以
后台-插件-广告管理-内容广告位四(PC)
后台-插件-广告管理-内容广告位四(手机)

热门文章

后台-插件-广告管理-侧边广告位一(PC)
后台-插件-广告管理-侧边广告位一(手机)
  • HTML 表单组件实例代码

  • HTML 表单用于搜集不同类型的用户输入。下文通过代码给大家分享html 表单组件实例代码,感兴趣的朋友参考下吧 废话不多说了,直接给大家贴代码了,具体代码如下所示: <!DOCTYPE
  • html2canvas 将html代码转为图片的使用方法

  • 转换代码到图片使用 html2canvas,这是一个非常著名的从浏览器网页截图的开源库,使用很方便,功能也很强大。 使用 html2canvas http:// html2canvas 的使用非常简单,简单
  • HTML网页中插入视频的方法小结

  • 现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera、Mozilla、Chrome),支持H.264的(Safari、IE 9、Chrome),都不支持的(IE6、
  • HTML实现文本框只读不能修改其中的内容

  • 废话不多说了,直接给大家贴代码了,具体代码如下所示: <!--方法1:>http:// 当鼠标放不上就离开焦点 --> <input type="text" name="input1" value=http://www.cppcns.com/web
  • 移动端专用的meta标签设置大全

  • 前言 之前学习前端中,对meta标签的了解仅仅只是这一句。 <meta charset="UTF-8"> 但是打开任意的网站,其head标签内都有一列的meta标签。比如我们我们网站,但是自己却很不熟
后台-插件-广告管理-侧边广告位二(PC)
后台-插件-广告管理-侧边广告位二(手机)

最新文章

  • 在Asp.net core项目中使用WebSocket

  • 今天小试了一下在ASP.NET core中使用websocket,这里记录一下: 在 Startup 类的 Configure 方法中添加 WebSocket 中间件。 app.UseWebSockets(); 它也可以传入一些参数 app.Us
  • Vue快速理解事件绑定是什么

  • 目录一、监听事件二、事件修饰符1、stop修饰符阻止事件冒泡2、capture修饰符3、self修饰符4、prevent修饰符5、键盘事件修饰符6、鼠标事件修饰符一、监听事件 监听事件一般
  • C#实现模拟ATM自动取款机功能

  • 目录(1)关于用户帐号的类:Account(2)关于银行数据库的类:BankDatabase(3)关于ATM屏幕显示的类:Screen(4)关于ATM键盘的类:Keypad(5)关于进钞、出钞口的类:DepositSlot(6)关于ATM
  • Java设计模式之抽象工厂模式浅析讲解

  • 1.介绍 当系统准备为用户提供一系列相关对象,又不想让用户代码和这些对象形成耦合时,就可以使用抽象工厂模式。 2.如何实现 1)抽象产品--Car 2)具体产品--BYDCar、TSLCar 3)抽象
  • 如何动态替换Spring容器中的Bean

  • 目录动态替换Spring容器中的Bean原因方案实现Spring中的bean替换问题动态替换Spring容器中的Bean 原因 最近在编写单测时,发现使用 Mock 工具预定义 Service 中方法的行为特
  • C#优雅的实现INotifyPropertyChanged接口

  • INotifyPropertyChanged接口在wpF或WinFrom程序中使用还是经常用到,常用于通知界面属性变更。标准写法如下: class NotifandroidyObject : INotifyPropertyChanged {
后台-插件-广告管理-侧边广告位三(PC)
后台-插件-广告管理-侧边广告位三(手机)