技术介绍

什么是 logback?

  • Logback为取代 log4j 而生。Logback 由 log4j 的创立者 Ceki Gülcü设计。以十多年设计工业级记录系统的经验为基础,所创建的logback 比现有任何记录系统(除了log4j2)更快、占用资源更少,有时差距非常大。

  • Logback提供独特而实用的特性,比如,Marker、参数化记录语句、条件化堆栈跟踪和强大的事件过滤功能。

  • 以上列出的仅仅是 logback 实用特性的一小部分,对于自身的错误报告,logback 依赖状态(Status)对象,状态对象极大地简化了故障查找。

  • Logback-core 附带了 Joran,Joran 是个强大的、通用的配置系统,你可以在自己的项目

  • 里使用 Joran 以获得巨大的作用。

安装搭建

必要条件

Logback-classic依赖slf4j-api.jar和logback-core.jar,现在让我们开始体验 logback。

实例:记录基本模版
  • logback-examples/src/main/java/chapters/introduction/HelloWorld1.java
package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld1 {
public static void main(String[] args) {
Logger logger = LoggerFactory .getLogger("chapters.introduction.HelloWorld1");
logger.debug("Hello world."); }
}
  1. HelloWorld1 类导入了 SLF4J API 定义的 Logger 类和 LoggerFactory 类,更明确地说是定义在 org.slf4j 包里的两个类。

    • main方法的第一行里,调用 LoggerFactory 类的静态方法 getLogger 取得一个 Logger 实例,将该实例赋值给变量 logger,logger 被命名为“chapters.introduction.HelloWorld1”。

    • main方法继续调用这个 logger 的 debug 方法并传递参数“Hello world”。我们称之为 main 方法包含了一条消息是“Hello world”、级别是 DEBUG 的记录语句。

注意:上面的例子并没有引用任何 logback 的类。多数情况下,只要涉及到记录,你只需 要引用 SLF4J 的类。因此在绝大多数情况下,你的类只导入 SLF4J 的 API,基本可以忽略 logback 的存在。

Logback可以通过内置的状态系统来报告其内部状态,通过 StatusManager 组件可以访问logback生命期内发生的重要事件。

我们可以调用 StatusPrinter 类的 print()方法来打印 logback 的内部状态。

实例:打印 Logger 状态
package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;
public class HelloWorld2 {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld2");
logger.debug("Hello world.");
// print internal state
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
}
}
日志输出
12:49:22.203 [main] DEBUG chapters.introduction.HelloWorld2 - Hello world. 12:49:22,078 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find
resource [logback-test.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
12:49 :22,093 |-INFO in c h.qos.logbac k.c lassic .LoggerContext[default] - Setting up default
configuration.
  1. Logback说它没有找到配置文件 logback-test.xml 和 logback.xml,于是用默认策略进行配置,即用一个基本的ConsoleAppender。

  2. Appender 类可被视为输出目的地的。

    • Appender 包含许多不同类型的目的地:

      • 控制台
      • 文件
      • Syslog
      • TCP 套接字
      • JMS
      • 其他
    • 用户可以很容易地自定义 Appender。
  3. 当发生错误时,logback 将自动在控制台上打印其内部状态。

上面的两个示例相当简单,大型程序里真实记录志情况也不会有太大区别。

  • 记录系统的基本模式不会改变,可能改变的是配置过程。也许你想按照自己的需要来定制或配置logback,之后的章节会讨论配置 logback。

  • 我们调用StatusPrinter.pring()方法来打印 logback 的内部状态。在诊断与logback相关的问题时,logback 的内部状态信息会非常有用。

使用Logback的基本三要素

在应程序里启用记录的三个必需步骤如下:

  1. 配置 logback 环境。
  2. 在每个需要执行记录的类里,调用 org.slf4j.LoggerFactory 类的 getLogger()方法获 取一个 Logger 实例,以当前类名或类本身作为参数。
  3. 调用取得的 logger 实例的打印方法,即 debug()、info()、warn()和 error(),把记录输出到配置里的各 appender。

体系结构

logback 的体系结构

Logback 的基本结构充分通用,可应用于各种不同环境。目前,logback 分为三个模块: Core、Classic 和 Access。

  • Core 模块是其他两个模块的基础。
  • Classic 模块扩展了 core 模块,相当于 log4j 的显著改进版。
    • Logback-classic 直接实现了 SLF4J API,因此你可以在 logback与其他记录系统如 log4j 和 java.util.logging (JUL)之间轻松互相切换。
  • Access 模块与 Servlet 容器集成, 提供 HTTP 访问记录功能。

可以这么说,我们常说的“logback”代表 logback-classic 模块。

Logger、Appender 和 Layout

  • Logback 建立于三个主要类之上:Logger、Appender 和 Layout。这三种组件协同工作, 使开发者可以按照消息类型和级别来记录消息,还可以在程序运行期内控制消息的输出格式 和输出目的地。

  • Logger 类是 logback-classic 模块的一部分,而 Appender 和 Layout 接口来自 logback-core,作为一个多用途模块,logback-core 不包含任何 logger。

Logger上下文

任何比System.out.println高级的记录 API 的第一个也是最重要的优点便是能够在禁用特定记录语句的同时却不妨碍输出其他语句。

这种能力源自记录隔离(space)——即所有各种记录语句的隔离——是根据开发者选择的条件而进行分类的。

  • 在 logback-classic里,这种分类是logger固有的。

  • 各个logger都被关联到一个LoggerContext,LoggerContext 负责制造 logger,也负责以树结构排列各 logger。

Logger是命名了的实体。它们的名字大小写敏感且遵从下面的层次化的命名规则: 命名层

次:

父子继承关系
  • 如果 logger 的名称带上一个点号后是另外一个 logger 的名称的前缀,那么,前者就被称为后者的祖先。

  • 如果 logger 与其后代 logger 之间没有其他祖先,那么,前者就被称为子 logger 之父。

比如,名为“com.foo"”的 logger 是名为“com.foo.Bar”之父。同理,“java”是“java.util"” 之父,也是“java.util.Vector”的祖先。

ROOT logger

根logger 位于 logger 等级的最顶端,它的特别之处是它是每个层次等级的共同始祖。 如同其他各 logger,根 logger 可以通过其名称取得,如下所示:

Logger rootLogger = LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);

其他所有logger也通过org.slf4j.LoggerFactory 类的静态方法getLogger取得。getLogger

方法以 logger 名称为参数。Logger 接口的部分基本方法列举如下:

package org.slf4j;
public interface Logger {
// Printing methods:
public void trace(String message);
public void debug(String message);
public void info(String message);
public void warn(String message);
public void error(String message);
}
有效级别(Level)即级别继承

Logger可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于 ch.qos.logback.classic.Level 类。

注意:在logback 里,Level 类是 final 的,不能被继承, Marker 对象提供了更灵活的方法。

如果 logger 没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别。 更正式地说:

  • logger L 的有效级别等于其层次等级里的第一个非 null 级别,顺序是从 L 开始,向上 直至根 logger。

  • 为确保所有 logger 都能够最终继承一个级别,根 logger 总是有级别,默认情况下,这 个级别是 DEBUG。

下一篇会介绍相关对于等级分析logback的内容!

【日志技术专题】「logback入门到精通」彻彻底底带你学会logback框架的使用和原理(入门介绍篇)的更多相关文章

  1. Spring Boot从入门到精通(九)整合Spring Data JPA应用框架

    JPA是什么? JPA全称Java Persistence API,是Sun官方提出的Java持久化规范.是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. ...

  2. 600集Python从入门到精通教程(懂中文就能学会)

    目录大纲: 本套教程15天 1-3   天内容为Linux基础命令 4-13  天内容为Python基础教程 14-15 天内容为 飞机大战项目演练 视频概括: 第一阶段(1-3天): 该阶段首先通过 ...

  3. ASP.NET MVC4入门到精通系列目录汇总

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  4. Scala入门到精通

    原文出自于: http://my.csdn.net/lovehuangjiaju 感谢! 也感谢,http://m.blog.csdn.net/article/details?id=52233484 ...

  5. ASP.NET MVC4入门到精通系列目录汇总(转)

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  6. 《MySQL数据库从入门到精通》 高级运维人才的必备书籍

    众所周知,每年就业市场都会迎来千万量级的高校毕业生,然而企业招工难和毕业生就业难的矛盾却一直没有得到很好地解决.究其原因,主要矛盾还是在于传统的学历教育与企业实际需求相脱节.为了杜绝高校毕业生求职时常 ...

  7. Jenkins pipeline 入门到精通系列文章

    Jenkins2 入门到精通系列文章. Jenkins2 下载与启动jenkins2 插件安装jenkins2 hellopipelinejenkins2 pipeline介绍jenkins2 jav ...

  8. PS入门到精通完全自学教程

    ps视频教程,ps自学视频教程.ps免费视频教程下载,PS入门到精通完全自学教程视频内容较大,分为俩部分: PS入门到精通完全自学教程-第一部分(带swf播放器):百度网盘,https://pan.b ...

  9. WF从入门到精通学习目录

    WF从入门到精通(第一章):WF简介 WF从入门到精通(第二章):workflow运行时 WF从入门到精通(第三章):workflow实例 WF从入门到精通(第四章):活动及workflow类型介绍 ...

随机推荐

  1. git《一》

    org.eclipse.jgit.api.errors.TransportException: https://gitee.com/wbweb/springboot_vue.git: Authenti ...

  2. 三大操作系统对比使用之·MacOSX

    时间:2018-11-13 整理:byzqy 本篇是一篇个人对Mac系统使用习惯和应用推荐的分享,在此记录,以便后续使用查询! 打开终端: command+空格,调出"聚焦搜索(Spotli ...

  3. Ubuntu 16.04 NVidia显卡 输入密码后 重复出现登录界面

    问题根源:显卡驱动 解决办法: CTRL+ALT+F1 # 切换到命令行 sudo service lightdm stop  # 关闭桌面显示管理器 sudo apt-get remove --pu ...

  4. 源码解析Spring AOP的加载与生效

    本次博主主要进行Spring AOP这里的解析,因为在工作中使用后,却不知道背后的实现原理并在使用的过程中发现了一些认知缺陷,所以决定写这么一篇文章以供大家参考参考,进入正题. 本次博主使用了@Asp ...

  5. 一、Rabbitmq的简单介绍

    以下只是本人从零学习过程的整理 部分内容参考地址:https://www.cnblogs.com/ysocean/p/9240877.html 1.RabbitMQ的概念 RabbitMQ是实现了高级 ...

  6. tar 命令简介

    tar命令可以为linux的文件和目录创建档案.利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来在磁带上创建档案,现在,用户可以在 ...

  7. 控制台:控制台艺术字 & 为控制台输出增加样式(console.log( ))

    控制台/代码文档LOGO 除了知乎的控制台,大部分的代码文档都有这样的字符logo. 下面这个网站可以自动生成符号艺术字: Text to ASCII Art Generator (TAAG) 控制台 ...

  8. Dubbo No provider问题排查思路

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 不想看字的同学可直接划到底部查看思维导图 问题分析 使用过Dubbo的朋友很多都碰到过如下报错 ...

  9. Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现

    环境 .NET5,Consul_v1.10.2 一.简介 在微服务中利用Consul可以实现服务的注册,服务发现,治理,健康检查等. Web调站点需要调用多个服务,如果没有Consul,可能就是Web ...

  10. C# 中 async 和 await 的基本使用

    C# 中 async 和 await 的基本使用 前言 经常在 C# 的代码中看到以 Async 结尾的方法,大概知道意为异步方法,但不知道怎么使用,也不知道如何定义. 对于"同步" ...