前言

日志是我们系统必备的功能之一,可以帮助我们开发人员定位系统的异常、错误以及运行流程的重要的工具。今天老顾就来介绍一下Spring boot的默认的logback日志框架。

常用日志组件

java开发日志处理是发现和调试bug所必不可少的,现在企业中常用的日志组件有哪些呢?JCL 、 JUL、 SLF4j、Log4j、 Log4j2 、 Logback、 jboss-loggin 等,是不是很乱,很多开发人员对日志框架理解的不够透彻,一般日志是配套出现的,一般是由一个日志门面和一个日志实现配套使用。

什么是日志门面和日志实现?

日志门面:是日志实现的抽象层。

日志实现:具体的日志功能的实现。

为什么不直接使用日志实现,而是又弄了一个叫日志门面的东西?

因为日志实现,可能会有一些代码的优化和改动,避免影响用户在项目中的使用,使用日志门面这些统一的接口,假设在实现层代码做了更改,用户在项目中使用日志而调用的接口等等都是不会受影响的。

常见的日志框架有哪些?

在实际使用中,是选择一个抽象层的日志门面搭配一个底层日志实现来使用的。

SpringBoot中默认选择的搭配是slf4j+logback

下面分别了解一下以上提到的各种门面和实现。

JCL:最后一次版本更新停在了2014年,后来没有继续维护更新,一般不考虑选用。

slf4j:这里提一下日志实现里面的log4j和logback,这两个实现和门面slf4j都是同一个人写的,他先写了log4j后,觉得性能可以再做优化,又写了logback,为了有更加适配的门面,自己又为log4j和logback量身打造了门面slf4j。所以这三者里面最优的搭配当然是slf4j+logback。

JUL:是java.util.logging包下提供的日志实现。实现简陋,很多地方受到开发者的吐槽,所以 首先排除

jboss-loggin:自诞生之初,就不是为了服务大众,不受到什么青睐。

log4j2:log4j问世之后,apache公司发现了日志市场,自家也开发了一款叫log4j2的产品。

下面老顾就介绍如何配置和使用 SLF4j + logback

日志的使用

先上一段测试代码

在这里 ,我们需要在每个类中创建一个 Logger对象,并且使用当前类的类名来创建,那么 这个类名存在的意义在哪里?我们可以先运行 第一个测试,看下结果

是不是少了个debug日志,下面会介绍,不急

由上图可知,我们的类名在日志中是为了方便我们找到异常是在哪个类中,进行锁定。因此,使用类名创建的logger的作用就是在这里,但是如果我们需要在每个类中都这样的创建一个logger对象,不方便,因此可以通过一个注解来帮我们实现那就是@Slf4j,该注解就可以帮我们自动创建一个log对象。

@Slf4j注解

使用 @Slf4j注解需要两点

1.安装lombok插件,可上网查阅

2.添加 lombok的依赖

修改代码

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

日志的配置

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

application.yml配置

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

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

logging:

2. 配置日志输出位置

logging:

运行后,我们可以看到Downloads下生成了一个文件spring.log这文件是spring生成

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

logging:

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

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

4. 配置日志 输出级别

日志一般主要看重的有5个级别,优先级如 DEBUG,所以我们测试代码中写了三行,在结果中我们只看到了info 和 error,因为debug优先级比info低,所以我们看不到。

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

logging:

运行后,我们可以看到 原来只能看到 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、根节点包含的属性

scan:当此属性设置为 true 时,配置文件如果发生改变,将会被重新加载,默认true 。scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当 scan 为 true 时,此属性生效。默认的时间间隔为1分钟。

2、子节点

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

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

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

4、子节点 设置变量

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

5、子节点

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

6、子节点五

用来设置某一个包或者具体的某一个类的日志打印级别、以及指定 。仅有一个 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的基本用法,下一篇老顾会介绍多环境下的使用,以及生产环境如何配置,谢谢!!!

● SpringCloud Alibaba之SentinelResource注解

● SpringCloud Alibaba之Sentinel的API实战

● SpringCloud Plus版本之SpringCloud Alibaba

● SpringCloud Alibaba之Nacos

● SpringCloud Alibaba之Nacos配置中心

● SpringCloud Alibaba之Nacos多环境多项目管理

● SpringCloud Alibaba之Nacos共享配置、灰度配置

● SpringCloud Alibaba之Nacos集群、持久化

点击在看,驱动原创

springboot 控制台输出错误信息_Spring boot使用logback实现日志配置相关推荐

  1. springboot 控制台输出错误信息_高级码农Spring Boot实战进阶之过滤器、拦截器的使用...

    众所周知的Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用.这个专栏将对Spring Boot框架从浅入深, ...

  2. springboot 控制台输出错误信息_springboot(6)——整合日志

    概述 我们在平时开发项目的时候想知道程序运行情况一般可以使用sysout.print();打印一些关键的代码或者通过debug查看运行状态,但是对于这种sysout.print();很现任出现代码多余 ...

  3. springboot 控制台输出错误信息_SpringBoot 三招组合拳,手把手教你打出优雅的后端接口...

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨RudeCrab 一.前言 一个后端接口大致分 ...

  4. springboot 控制台输出错误信息_springboot日志详解

    一. 主流日志框架 市场上存在非常多的日志框架. JUL(java.util.logging),JCL(Apache Commons Logging),Log4j,Log4j2,Logback. SL ...

  5. qt能使用logback_Spring boot使用logback实现日志配置

    欢迎关注头条号:老顾聊技术 精品原创技术分享,知识的组装工 目录 前言 常用日志组件 什么是日志门面和日志实现 常见的日志框架 日志使用 @slf4j注解 日志的配置 logback-spring配置 ...

  6. 定制自己的Springboot控制台输出广告横幅--banner

    定制自己的Springboot控制台输出广告横幅--banner 一.介绍 导读: 好奇是最好的发现者,兴趣是最好的导师,当你对大千代码世界很好奇的时候,你就会主动去发现这个世界的奇妙,当你对程序感兴 ...

  7. C++ MFC控制台输出调试信息

    C++ MFC控制台输出调试信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1.#include <conio.h> 2.在需要开启控制台窗口的地方调用 ...

  8. c语言各种输出错误提示,C语言错误处理-输出错误信息

    C语言错误处理-输出错误信息 程序开发过程中,不可避免地会因为细节疏忽导致程序的编译.运行出错,当出现错误时编译器一般会将错误信息展示出来,但由程序操作或用户输入导致的错误往往会使程序直接崩溃并无任何 ...

  9. SpringBoot集成logback彩色日志配置以及banner启动设置(炫酷到爆炸!)

    文章目录 前言 一.banner配置 1.1 banner图像在线生成工具 1.2 banner配置颜色 1.3 banner启动状态控制 二.logback彩色日志配置 2.1 引入依赖 2.2 l ...

最新文章

  1. java fragment_Java Web Fragment在项目中使用方法详解
  2. OpenCV代码提取:Windows上通过DShow获取Camera视频
  3. 使用DocFX生成文档
  4. springboot中获得app_在SpringBoot中读取环境变量
  5. gsonformat插件_裂墙推荐!IntelliJ IDEA 常用插件一览,让效率成为习惯
  6. 列表list,元组tuple,字符串
  7. shell脚本if语句判断
  8. sudo echo x **.** 时 base: : Permission denied
  9. 处女座的比赛资格(拓扑排序)
  10. 【转】极品免费网站空间申请:000webhost.com免费1.5G美国空间PHP+MySQL
  11. node.js中操作数据库
  12. Excel表中只能选择固定内容
  13. 一脸懵逼加从入门到绝望学习hadoop之Caused by: java.net.UnknownHostException: master报错
  14. 轩辕实验室丨基于信息熵的车载网络流量异常检测防御方法
  15. package、folder和source folder的区别
  16. 柯桥日语培训:语法 | 「あまり 」知识解析
  17. 敏捷迭代管理 --工时估算(估点)
  18. Android源码定制(5)——root指纹定制与抹除
  19. HQChart使用教程29-走势图如何对接第3方数据4-叠加股票分时数据
  20. Mathematica 训练课(5)-函数计算方法整理

热门文章

  1. 若依前后端分离发布富文本框内容 | uni-app微信小程序展示富文本框内容
  2. 汽车电子_EMC测试_CE试验整改
  3. Polyworks脚本开发学习笔记(五)-变量使用基本语法
  4. 【问题分析】打开的文件过多
  5. 《创业在路上》对话Moka HR创始人,你需要一杯摩卡
  6. 软件工程 案例分析作业(CSDN的网上教学社区)
  7. leetcode系列-700.二叉搜索树中的搜索
  8. 用 python-message 为程序库和日志模块解耦
  9. 物流信息管理php,物流信息管理平台设计与实现PHP1012(毕业设计+论文)
  10. jsp+ssm+mysql实现简单的物流快递管理系统源码+讲解教程+参考论文+开题报告