参考文章直达车

  • logback的官方网站: http://logback.qos.ch
  • SLF4J的官方网站:http://www.slf4j.org

logback(一)理论概述
logback(二)springboot配置日志文件格式、logback-spring配置文件详解
logback(三)mybatis-plus结合logback将sql语句输出到日志文件

一 简介

Logback继承了log4j,是一款开源项目。它由Ceki Gülcü设计,也是 log4j的创始人。 它建立在十年来设计工业强度测试系统的经验基础上。由此产生的产品,比所有现有的日志记录系统更快,占用更小的空间,有时还会有很大的差距 。同样重要的是,日志返回提供了其他日志系统所没有的独特而非常有用的特性。

二 logback是如何加载的呢,有以下4个步骤:

  1. Logback试图在类路径找到一个文件 logback-test.xml

  2. 如果没有找到这样的文件,会在类路径检查文件 logback.xml

  3. 如果还没找到,服务提供者装载设施 (在JDK 1.6中引入的) 用于解析的实现 com.qos.logback.classic.spi.Configurator 界面通过查找文件 meta - inf \ \ ch.qos.logback.classic.spi.Configurator服务。 其内容应指定完全 限定的类名 配置器 实现。

  4. 如果以上都不是成功,logback配置本身 自动使用 BasicConfigurator 这将导致日志输出到控制台。

我们常用的有第一种(日志分级别配置使用)和第四种(默认,什么都不配置的情况下)

三 logback是springboot自带的模块,在spring-boot-starter-web里面

除了Logback-classic .jar之外,Logback-classic模块还需要在类路径中存在slf4j-api.jar(这个是一个独立的模块,有很多包都引用了它,如下图)和logback-core.jar。

四 一个简单的例子

package com.fox.test;import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Demo {public static void main(String[] args) {Logger logger = LoggerFactory.getLogger("com.fox.test.Demo");// 也可以这样写getLogger(当前类名.class)// Logger logger = LoggerFactory.getLogger(Demo.class);logger.debug("Hello world");// 打印内部状态LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();StatusPrinter.print(lc);}
}

在main()方法的第一行,变量名 logger 从 LoggerFactory 类调用静态检索 getLogger方法获取一个 Logger 实例。 这个日志程序被命名为 “com.fox.test.Demo”。方法传入“Hello world”作为参数。 我们说main方法包含一个DEBUG级别的日志语句,消息为“Hello world”。

注意,上面的示例没有引用任何logback返回类。 在大多数情况下,就logback记录而言,您的类只需要导入SLF4J类。 因此,绝大多数(如果不是全部的话)类将使用SLF4J API,并且不会注意logback返回的存在。

启动 Demo 应用程序将在控制台上输出一行代码。 根据logback的默认配置策略,当没有找到默认配置文件时,logback将向根记录器添加一个ConsoleAppender。

14:06:27.434 [main] DEBUG com.fox.test.Demo - Hello world

打印内部状态结果如下

14:06:27,384 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
14:06:27,384 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
14:06:27,392 |-INFO in ch.qos.logback.classic.BasicConfigurator@11028347 - Setting up default configuration.

Logback解释说,由于没有找到Logback-test.xml和Logback.xml配置文件(稍后讨论),它使用默认策略配置自己,这是一个基本的ConsoleAppender。 Appender是一个可以被视为输出目的地的类。 appender存在于许多不同的目的地,包括控制台、文件、Syslog、TCP Sockets、JMS等等。 用户还可以根据具体情况轻松创建自己的appender。

注意,如果出现错误,logback将自动在控制台上打印其内部状态。

前面的例子相当简单,大型应用程序中的实际日志记录不会有太大的不同。 日志记录语句的一般模式不会改变, 只有配置过程会有所不同。

还可以通过以下方式来打印不同级别的日志,由低到高TRACE(跟踪) DEBUG INFO WARN ERROR OFF(关闭)

     logger.trace("trace哈哈哈");logger.debug("debug哈哈哈");logger.info("info哈哈哈");logger.warn("warn哈哈哈");logger.error("error哈哈哈");

五 参数打印

可以这样打印,将参数和变量拼接起来

     int one = 15;String two = "你好";logger.debug("debug哈哈哈,第一个参数:" + one + ",第二个参数:" + two);
15:31:43.490 [main] DEBUG com.fox.test.Demo - debug哈哈哈,第一个参数:15,第二个参数:你好

但是,为了提高性能的同时最小化的影响代码的可读性,提供了一种更方便的形式
如果有多个参数,可以写多个占位符{},它将自动对应后面的参数

     int one = 15;String two = "你好";logger.debug("debug哈哈哈,第一个参数:{},第二个参数:{}", one, two);
15:29:58.015 [main] DEBUG com.fox.test.Demo - debug哈哈哈,第一个参数:15,第二个参数:你好

对于一些日志而言,会产生构造消息参数的成本,即将整数one转换为String,并连接中间字符串。 这与是否记录消息无关。

第二种变体的性能至少比第一种变体高30倍。

因为在评估是否记录日志之后,并且只有当决定为正时,记录器才会实现格式化消息并将“{}”对替换为条目的字符串值。 换句话说,当禁用日志语句时,这种形式不会产生参数构造的成本。

当然在实践中,这种开销是微不足道的。但是为了代码可读性高,还是建议使用第二种

logback(一)理论概述相关推荐

  1. 视频编解码之理论概述 和即时通信

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关实时 ...

  2. 数据结构与算法理论概述

    数据结构与算法理论概述 文章目录 数据结构与算法理论概述 数据结构概述 ◆ 数据结构涵盖的内容 ◆ 存储数据 算法概述 ◆ 算法的基本特性 ◆ 算法设计要求 ◆ 算法分析 数据结构概述 狭义上:数据结 ...

  3. Spring Cloud 基本理论概述

    前言 万丈高楼平地起,但还有种说法叫:"万事开头难",不管使用什么技术,就算是行业老司机,也得乖乖的从基本理论概述开始.通过本篇文章,您将理解什么是 Spring Cloud ?S ...

  4. Linux负载均衡解决方案 -- LVS 理论概述

    Lvs 理论概述 一.什么是 LVS ? 二.为什么需要 LVS ? 三.LVS 原理 1.LVS 体系结构 2.LVS 工作模式 3.LVS 调度算法 四.LVS 工作方式 1.LVS-DR 模式 ...

  5. 视频编码零基础入门(1):视频编解码之理论概述

    1.前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关 ...

  6. Docker基本理论概述

    < Docker基本理论概述 > 关于Docker 1.为什么要使用 Docker ? 项目从开发到上线,从操作系统,到运行环境,再到应用的详细配置.作为开发工程师与运维工程师之间的协作, ...

  7. 机器学习算法-随机森林之理论概述

    前面我们用 3 条推文从理论和代码角度讲述了决策树的概念和粗暴生成. 机器学习算法-随机森林之决策树R 代码从头暴力实现(3) 机器学习算法-随机森林之决策树R 代码从头暴力实现(2) 机器学习算法 ...

  8. [ML] Genetic Algorithm 理论概述

    Genetic Algorithm 遗传算法: 遗传算法受到达尔文自然选择理论的启发,以遗传/变异/择优的策略进行机器学习进程. 核心算法逻辑: # Copyright:CMPUT 296, Univ ...

  9. ospf理论概述.md

    #OSPF概述: 1.OSPF简介 ·OSPF(open shortest path fisrt,开发最短路径优先),典型的链路状态路由协议,是使用最广泛的IGP协议 ·每台路由器交互的是链路状态信息 ...

最新文章

  1. 精通JavaScript--07设计模式:行为型
  2. poj 1716(贪心)
  3. 文献记录(part83)--Building outlier detection ensembles by selective parameterization of ...
  4. python 判断文件是否被占用_python 在删除文件的时候检测该文件是否被其他线程或者进程占用?...
  5. 修改FTP服务器端口后无法访问
  6. 研究人脸识别技术必须知道的十个基本概念
  7. 2019安卓机皇已定?三星Note10系列被曝将在8月10日发布
  8. AttributeError: module ‘tensorflow‘ has no attribute ‘ConfigProto‘
  9. 创建项目连接错误_EF6连接Postgresql数据库
  10. Ubuntu16.04 pip下载安装tensorflow(GPU版)
  11. 各种软件以及插件官网地址 echarts Vscode 阿里云图标库 鼠标图标
  12. LiveData setValue和postValue源码解析
  13. 棋牌app开发需要多少钱
  14. 合并Windows系统镜像教程(Win 7+win 8.1 合盘)
  15. 记录一次Excel表格的误删恢复操作,WPS版
  16. Windos测试IP和端口是否能访问
  17. SQL对时间的操作,比如在当前时间上增加减少一天,在当前的时间上增加减少一个月
  18. C语言--不使用库函数,利用指针编写一个计算字符串长度的程序
  19. HTML5 的课堂案例
  20. Python-06 数据结构之列表

热门文章

  1. 三段式电流保护 Matlab仿真
  2. VC++控制程控电源2306读取电流
  3. Python可视化数据分析03、jieba【分词】
  4. Linux性能优化-DNS解析
  5. 可疑进程描述(二)----rundll32.exe进程详述
  6. python的价值观_Python beauthulsoup刮刮雅虎财经价值观
  7. 赴美建厂并未获得美国芯片的支持,台积电后悔莫及
  8. 图片瀑布流加载和购物车
  9. Python中 and 和 or 运算短路逻辑
  10. 银行金融 词汇 简写 中英文对照