第一章节搭建了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. 使用Dockerfile构建镜像命令自己的理解

    1.FROM 基于那个基础命令开始构建镜像,我的理解就是选择一个操作系统 2.CMD 里面放的是指定一个容器启动时要运行的命令 3.ENTRYPOINT 类似于CDM命令,不过 docker run ...

  2. Android_SharedPreferences实现的自动登录和记住密码

    效果: 先贴一个SharedPreferences工具类: package com.example.didida_corder.ToolClass; import android.content.Co ...

  3. Docker最全教程——从理论到实战(二十)

    前言 各种编程语言均有其优势和生态,有兴趣的朋友完全可以涉猎多门语言.在平常的工作之中,也可以尝试选择相对适合的编程语言来完成相关的工作. 在团队技术文档站搭建这块,笔者尝试了许多框架,最终还是选择了 ...

  4. java - synchronized与lock的区别

    synchronized与lock的区别 原始构成 synchronized是关键字属于JVM层面 monitorenter(底层是通过monitor对象来完成,其实wait/notify等对象也依赖 ...

  5. 2019-08-18 纪中NOIP模拟A组

    T1 [JZOJ6309] 完全背包 题目描述

  6. Vue中axios有关请求头的几点小结

    在Vue前端中向后端发起http请求会有着两种写法:一种是在vue文件中直接导入axios模板,另外一种是使用Vue的属性$http. 1.在第一种方式中,在同一个工程中所添加的vue文件直接使用ax ...

  7. 2018ICPC南京站Problem A. Adrien and Austin

    题意: n个石头再1-n的位置上,两个人轮流取时候,必须取连续的一段,最多取k个,不能取为输,问谁会赢 解析: 当k大于等于2时,先手总能把石头分成相等的两部分,此时后手无论怎么走,先手在对称的位置选 ...

  8. ajax从jsp向servlet传值

    function Delete(s){ xmlHttp=new XMLHttpRequest(); var url = "/emp/FindSpecial?selcol=" +s; ...

  9. 4.Docker 操作容器

    启动容器 所需要的命令主要为 docker run.例如,下面的命令输出一个 “Hello World”,之后终止容器. docker run ubuntu:16.04 /bin/echo 'Hell ...

  10. Namespace declaration statement has to be the very first statement or after

    解决办法:将页面文件转为utp-8无dom格式就OK了.以notepad++为例: