第一章节搭建了logback日志框架的环境,演示了Hello World的示例,并详细分析了示例。

  搭建日志框架的过程非常简单,只需要在项目的classpath上添加以下三个jar包,logback-core,logback-classic,slf4j-api-xx.jar。其中logback-classic依赖core和slf4j,如果使用maven构建,只需要添加classic依赖即可。

1、HelloWorld示例

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter; /**
*
* @File Name: HelloWorld.java
* @Description: 学习logback的第一个程序,要运行此代码需要将logback-classic,logback-core,slf4j-api-xx.jar引入到classpath。
* @version 1.0
* @since JDK 1.8
*/
public class HelloWorld {
public static void main(String[] args) {
// 工厂模式,通过getLogger方法获取Logger对象,它的全名为org.slf4j.Logger
// 工厂方法的参数可以是类全名,也可以是其对应的Class类
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
// 定义了一条logging statement,它的level为debug,它的message为"Hello World"
logger.debug("Hello World");
// 获取日志框架的上下文,它等同于applicationContext在spring框架中的地位
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
// 打印出日志框架运行的详细日志,也可以理解为分析LoggerContext对象的生命周期。
StatusPrinter.print(context);
}

  上述代码的运行结果如下:

17:04:25.470 [main] DEBUG learn.logback.chapter1.HelloWorld - Hello World
17:04:25,441 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
17:04:25,441 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
17:04:25,441 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
17:04:25,442 |-INFO in ch.qos.logback.classic.BasicConfigurator@31221be2 - Setting up default configuration.

  Logback在运行时总共经历了4步:

  1. 它首先去查找classpath路径下的logback-test.xml配置文件。
  2. 查找失败之后,继续查找logback.groovy配置文件。
  3. 如果还失败,继续查找logback.xml配置文件。
  4. 如果上述三个文件都没有找到,使用默认的配置。最后的日志也显示它是BasicConfigurator类

2、 BasicConfigurator(默认配置)

  这个类继承ContextAwareBase类,并实现Configurator接口,只有一个默认的构造器和configure方法,代码如下:

public void configure(LoggerContext lc) {
// 没有实际意义,打印日志
addInfo("Setting up default configuration."); // 添加默认的配置的Appender,ConsoleAppender,并设置默认的Encoder
ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<ILoggingEvent>();
ca.setContext(lc);
ca.setName("console");
LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<ILoggingEvent>();
encoder.setContext(lc); // same as
// PatternLayout layout = new PatternLayout();
// layout.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
TTLLLayout layout = new TTLLLayout(); layout.setContext(lc);
layout.start();
encoder.setLayout(layout); ca.setEncoder(encoder);
ca.start();
// 添加默认的根Logger,之后会学习到logger的逻辑结构为树形结构,树的跟为Logger.ROOT_LOGGER_NAME,这个常量的值为root,所有logger从根logger中继承Appender
Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME);
rootLogger.addAppender(ca);
}

  这段代码做了两件事:

  1. 设置默认的Appender为ConsoleAppender,由于Appender类依赖Layout,所以依赖的layout对象也被创建。
  2. 创建了root的logger对象,并设置Logger对象的Appender为consoleAppender。

  至此本篇内容结束,原著的链接是:http://logback.qos.ch/manual/introduction.html

后端——框架——日志框架——logback——《官网》阅读笔记——第一章节的更多相关文章

  1. Spark SQL官网阅读笔记

    Spark SQL是Spark中用于结构化数据处理的组件. Spark SQL可以从Hive中读取数据. 执行结果是Dataset/DataFrame. DataFrame是一个分布式数据容器.然而D ...

  2. Spring官网阅读(十八)Spring中的AOP

    文章目录 什么是AOP AOP中的核心概念 切面 连接点 通知 切点 引入 目标对象 代理对象 织入 Spring中如何使用AOP 1.开启AOP 2.申明切面 3.申明切点 切点表达式 excecu ...

  3. Spring官网阅读 | 总结篇

    接近用了4个多月的时间,完成了整个<Spring官网阅读>系列的文章,本文主要对本系列所有的文章做一个总结,同时也将所有的目录汇总成一篇文章方便各位读者来阅读. 下面这张图是我整个的写作大 ...

  4. Spring官网阅读(十六)Spring中的数据绑定

    文章目录 DataBinder UML类图 使用示例 源码分析 bind方法 doBind方法 applyPropertyValues方法 获取一个属性访问器 通过属性访问器直接set属性值 1.se ...

  5. Spring官网阅读(十七)Spring中的数据校验

    文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...

  6. Spring官网阅读(三)自动注入

    上篇文章我们已经学习了1.4小结中关于依赖注入跟方法注入的内容.这篇文章我们继续学习这结中的其他内容,顺便解决下我们上篇文章留下来的一个问题-----注入模型. 文章目录 前言: 自动注入: 自动注入 ...

  7. layui前端框架实例(修复官网数据接口异常问题)

    layui前端框架实例,官网的实例会提示数据接口异常,已修复. 主要是修改数据表格,做一个可以用的实例,可以选中,编辑,删除等. gitee地址:https://gitee.com/pingg2019 ...

  8. 学习phalcon框架按照官网手册搭建第一个项目注册功能

    中文手册官网:http://phalcon.ipanta.com/1.3/tutorial.html#bootstrap 官网提供http://www.tutorial.com项目源码github地址 ...

  9. Spring官网阅读(九)Spring中Bean的生命周期(上)

    文章目录 生命周期回调 1.Bean初始化回调 2.Bean销毁回调 3.配置默认的初始化及销毁方法 4.执行顺序 5.容器启动或停止回调 Lifecycle 接口 LifecycleProcesso ...

随机推荐

  1. mac 中 端口占用

    1.   sudo lsof -i :5001 2.   sudo kill -9 PID

  2. linux 第一个知识点(my)

    关于Linux - rwx rwx rwx root user 194 Oct : 19  21:24 test -:此符号为文件名,如果是d 则为目录,如果是l 则为连接 rwx: 这是所有者所有的 ...

  3. css使用padding-bottom百分比进行提前占位,防止抖动

    页面加载抖动问题 在web开发中,经常会遇到这样一个问题,比如一个宽度百分百,高度自适应的图片,在网速慢的情况下加载过程中会出现抖动的问题(未加载图片前容器的高度为0,图片加载完成后下面的内容会被挤下 ...

  4. P1041 传染病控制【暴搜】

    P1041 传染病控制 提交 10.78k 通过 3.74k 时间限制 1.00s 内存限制 125.00MB 题目提供者CCF_NOI 难度提高+/省选- 历史分数100 提交记录 查看题解 标签 ...

  5. HDU - 5532 Almost Sorted Array (最长非严格单调子序列)

    We are all familiar with sorting algorithms: quick sort, merge sort, heap sort, insertion sort, sele ...

  6. vue自学入门-8(vue slot-scope)

    vue自学入门-1(Windows下搭建vue环境) vue自学入门-2(vue创建项目) vue自学入门-3(vue第一个例子) vue自学入门-4(vue slot) vue自学入门-5(vuex ...

  7. python数据分析学习(2)pandas二维工具DataFrame讲解

    目录 二:pandas数据结构介绍   下面继续讲解pandas的第二个工具DataFrame. 二:pandas数据结构介绍 2.DataFarme   DataFarme表示的是矩阵的数据表,包含 ...

  8. java - jdk线程池详解

    线程池参数详解 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUni ...

  9. 2019-08-20 纪中NOIP模拟A组

    T1 [JZOJ6310] Global warming 题目描述 给定整数 n 和 x,以及一个大小为 n 的序列 a. 你可以选择一个区间 [l,r],然后令 a[i]+=d(l<=i< ...

  10. 使用pycharm搜索框和正则表达式匹配内容

    使用pycharm搜索框和正则表达式匹配内容原创薯饼__ 最后发布于2019-03-04 19:28:53 阅读数 660 收藏展开有时候我们要在爬虫网站中匹配各种各样的文本块,以获取需要的信息,每一 ...