logback(一)理论概述
参考文章直达车
- 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个步骤:
Logback试图在类路径找到一个文件 logback-test.xml
如果没有找到这样的文件,会在类路径检查文件 logback.xml
如果还没找到,服务提供者装载设施 (在JDK 1.6中引入的) 用于解析的实现 com.qos.logback.classic.spi.Configurator 界面通过查找文件 meta - inf \ \ ch.qos.logback.classic.spi.Configurator服务。 其内容应指定完全 限定的类名 配置器 实现。
如果以上都不是成功,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(一)理论概述相关推荐
- 视频编解码之理论概述 和即时通信
前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关实时 ...
- 数据结构与算法理论概述
数据结构与算法理论概述 文章目录 数据结构与算法理论概述 数据结构概述 ◆ 数据结构涵盖的内容 ◆ 存储数据 算法概述 ◆ 算法的基本特性 ◆ 算法设计要求 ◆ 算法分析 数据结构概述 狭义上:数据结 ...
- Spring Cloud 基本理论概述
前言 万丈高楼平地起,但还有种说法叫:"万事开头难",不管使用什么技术,就算是行业老司机,也得乖乖的从基本理论概述开始.通过本篇文章,您将理解什么是 Spring Cloud ?S ...
- Linux负载均衡解决方案 -- LVS 理论概述
Lvs 理论概述 一.什么是 LVS ? 二.为什么需要 LVS ? 三.LVS 原理 1.LVS 体系结构 2.LVS 工作模式 3.LVS 调度算法 四.LVS 工作方式 1.LVS-DR 模式 ...
- 视频编码零基础入门(1):视频编解码之理论概述
1.前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关 ...
- Docker基本理论概述
< Docker基本理论概述 > 关于Docker 1.为什么要使用 Docker ? 项目从开发到上线,从操作系统,到运行环境,再到应用的详细配置.作为开发工程师与运维工程师之间的协作, ...
- 机器学习算法-随机森林之理论概述
前面我们用 3 条推文从理论和代码角度讲述了决策树的概念和粗暴生成. 机器学习算法-随机森林之决策树R 代码从头暴力实现(3) 机器学习算法-随机森林之决策树R 代码从头暴力实现(2) 机器学习算法 ...
- [ML] Genetic Algorithm 理论概述
Genetic Algorithm 遗传算法: 遗传算法受到达尔文自然选择理论的启发,以遗传/变异/择优的策略进行机器学习进程. 核心算法逻辑: # Copyright:CMPUT 296, Univ ...
- ospf理论概述.md
#OSPF概述: 1.OSPF简介 ·OSPF(open shortest path fisrt,开发最短路径优先),典型的链路状态路由协议,是使用最广泛的IGP协议 ·每台路由器交互的是链路状态信息 ...
最新文章
- 精通JavaScript--07设计模式:行为型
- poj 1716(贪心)
- 文献记录(part83)--Building outlier detection ensembles by selective parameterization of ...
- python 判断文件是否被占用_python 在删除文件的时候检测该文件是否被其他线程或者进程占用?...
- 修改FTP服务器端口后无法访问
- 研究人脸识别技术必须知道的十个基本概念
- 2019安卓机皇已定?三星Note10系列被曝将在8月10日发布
- AttributeError: module ‘tensorflow‘ has no attribute ‘ConfigProto‘
- 创建项目连接错误_EF6连接Postgresql数据库
- Ubuntu16.04 pip下载安装tensorflow(GPU版)
- 各种软件以及插件官网地址 echarts Vscode 阿里云图标库 鼠标图标
- LiveData setValue和postValue源码解析
- 棋牌app开发需要多少钱
- 合并Windows系统镜像教程(Win 7+win 8.1 合盘)
- 记录一次Excel表格的误删恢复操作,WPS版
- Windos测试IP和端口是否能访问
- SQL对时间的操作,比如在当前时间上增加减少一天,在当前的时间上增加减少一个月
- C语言--不使用库函数,利用指针编写一个计算字符串长度的程序
- HTML5 的课堂案例
- Python-06 数据结构之列表