写点什么

Spring-boot 使用 logback 实现日志配置,java 自学视频网站

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:2702 字

    阅读完需:约 9 分钟

修改代码[图片上传失败...(image-8e9cdc-1579158948625)]


上面的日志输出方式,是默认方式;怎么设置日志输出,我们来看看怎么配置?

日志的配置

日志可以通过两种方法配置,一种是 application.yml 配置,一种是 lobback-spring.xml 配置。


application.yml 配置


这种配置方法 配置项较少,一般有以下属性配置


1. 配置输出格式 为 ?时间 ?- ?消息 ?换行


logging:pattern:console: "%d - %msg%n"


[图片上传失败...(image-68c17c-1579158948625)]


2. 配置日志输出位置


logging:path: /Users/gujiachun/Downloads


运行后,我们可以看到 Downloads 下生成了一个文件 spring.log 这文件是 spring 生成[图片上传失败...(image-aad93a-1579158948625)]


3. 配置日志输出文件 ,这样可以指定日志输出到哪个文件


logging:file: /Users/gujiachun/Downloads/test.log


我们可以看到在 Downloads 生成了 test 文件



这里注意:我们可以配置日志保存位置,以及具体输出的文件,如果同时配置的话,会使用我们指定的 file 为主


4. 配置日志 输出级别


日志一般主要看重的有 5 个级别,优先级如 DEBUG<INFO<WARN<ERROR<FATAL 等,而 springboot 默认配置是 INFO 级别,所以我们测试代码中写了三行,在结果中我们只看到了 info 和 error,因为 debug 优先级比 info 低,所以我们看不到。


那么我们配置一下格式 logging.level.包名或类名: 级别 即可, 举例如下


logging:pattern:console: "%d - %msg%n"file: /Users/gujiachun/Downloads/test.loglevel:#这里可以是包名也可以是类名 com.rainbow.goods.test: debug


运行后,我们可以看到 原来只能看到 info 和 error 的,现在的 debug 也可以看到


lobback-spring.xml 配置

一、我们先把 application.yml 的关于日志的注释掉,新建一个文件 logback-spring.xml,为什么要取这个名字呢,Spring Boot 官方推荐优先使用带有-spring 的文件名作为你的日志配置**(如使用 logback-spring.xml,而不是 logback.xml)**,如果我们想自定义名字,可以在 application.yml 中通过 logging.config=classpath:/xxx.xml 等方式配置。


二、注意几个 xml 节点的含义


1、根节点<configuration debug="false">包含的属性


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


2、子节点 <root>


? ?** root 节点是必选节点**,用来指定最基础的日志输出级别,只有一个 level 属性。? ?** level:用来设置打印级别**,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为 INHERITED 或者同义词 NULL。默认是 DEBUG。可以包含零个或多个元素,标识这个 appender 将会添加到这个 loger。


3、子节点<contextName> 设置上下文名称


? ? 每个 logger 都关联到 logger 上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过 %contextName 来打印日志上下文名称,一般来说我们不用这个属性,可有可无。


4、子节点<property> 设置变量


用来定义变量值的标签, 有两个属性,name 和 value;其中 name 的值是变量的名称,value 的值时变量定义的值。通过定义的值会被插入到 logger 上下文中。定义变量后,可以使“${}”来使用变量。


5、子节点<appender>


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


6、子节点五 <loger>


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


简要说明


appender:配置项,规则,通过这个节点内容配置,我们可以配置输出位置(控制台,文件),输出格式等 root:根节点,表明整个项目基本的日志级别,里面可以应用多个 appender 规则



在上面的 logback-spring.xml 中,appender 配置了一个规则, ConsoleAppender 表明日志输出到控制台,layout 表明输出格式,root 节点配置表明该项目基础的日志级别为 info,引入 控制台输出的规则,那么我们运行看结果



从结果上来看,配置的是 info 级别,所以 debug 的没有输出,现在如果我想把日志输出到文件怎么处理呢,可以使用如下配置,添加一个 appender 规则,由于日志可能比较多,一般是按照日期来输出日志,因此如下配置了每天一个日志到指定位置



启动执行



如果我们想把 info 的日志和 error 的日志区分到两个文件放置,该怎么写呢?


我们可以新建一个规则,结构如上图,只是在里面添加了一个过滤器,使用的是范围过滤,也就是拦截 Error 级别的信息,如下



启动执行



运行后,我们可以在 Downloads 下的 error.log 中看到 里面只有一条记录,关于 error 的记录,但是我们在 info 的那个文件中,**依旧有 info 和 error 的信息,那么如果将 info 提取出来呢? **能不能也想这样添加一个过滤器呢,测试一下,经过测试我们发现没有作用,因为拦截 info,error 还是会显示,因为 error 的优先级高,那么我们可以利用 LevelFilter 方法来处理,如下



运行后,发现确实实现了 ?info 和 error 的日志分开,但是 在上图例子中,虽然我们排除了 error,但是除开 info,如果我们还有 warn 级别的日志信息,还是会输出在 info.log 文件中,因为 warn 优先级比 info 高,但是我们只是拦截了 error 而已。

总结

以上介绍了 logback 的基本用法,下一篇老顾会介绍多环境下的使用,以及生产环境如何配置,谢谢!!!![](https://upload-images.jianshu.io/upload_images/15590149-835bd5077ba8dce4.png?imageMogr2/auto-orient/strip%7CimageView2/2/


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


w/1240)


如果喜欢本文,可以关注我们的官方账号,第一时间获取资讯。你的关注是对我们更新最大的动力哦~

今日福利(点击下方文字超链接获取)





如果你的技术提升遇到瓶颈了,或者缺高级 Android 进阶视频学习提升自己,这有大量大厂面试题为你面试做准备!点击Android 学习,面试文档,视频收集大整理获取

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Spring-boot使用logback实现日志配置,java自学视频网站