后端——框架——日志框架——logback——《官网》阅读笔记——第一章节
第一章节搭建了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步:
- 它首先去查找classpath路径下的logback-test.xml配置文件。
- 查找失败之后,继续查找logback.groovy配置文件。
- 如果还失败,继续查找logback.xml配置文件。
- 如果上述三个文件都没有找到,使用默认的配置。最后的日志也显示它是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);
}
这段代码做了两件事:
- 设置默认的Appender为ConsoleAppender,由于Appender类依赖Layout,所以依赖的layout对象也被创建。
- 创建了root的logger对象,并设置Logger对象的Appender为consoleAppender。
至此本篇内容结束,原著的链接是:http://logback.qos.ch/manual/introduction.html
后端——框架——日志框架——logback——《官网》阅读笔记——第一章节的更多相关文章
- Spark SQL官网阅读笔记
Spark SQL是Spark中用于结构化数据处理的组件. Spark SQL可以从Hive中读取数据. 执行结果是Dataset/DataFrame. DataFrame是一个分布式数据容器.然而D ...
- Spring官网阅读(十八)Spring中的AOP
文章目录 什么是AOP AOP中的核心概念 切面 连接点 通知 切点 引入 目标对象 代理对象 织入 Spring中如何使用AOP 1.开启AOP 2.申明切面 3.申明切点 切点表达式 excecu ...
- Spring官网阅读 | 总结篇
接近用了4个多月的时间,完成了整个<Spring官网阅读>系列的文章,本文主要对本系列所有的文章做一个总结,同时也将所有的目录汇总成一篇文章方便各位读者来阅读. 下面这张图是我整个的写作大 ...
- Spring官网阅读(十六)Spring中的数据绑定
文章目录 DataBinder UML类图 使用示例 源码分析 bind方法 doBind方法 applyPropertyValues方法 获取一个属性访问器 通过属性访问器直接set属性值 1.se ...
- Spring官网阅读(十七)Spring中的数据校验
文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...
- Spring官网阅读(三)自动注入
上篇文章我们已经学习了1.4小结中关于依赖注入跟方法注入的内容.这篇文章我们继续学习这结中的其他内容,顺便解决下我们上篇文章留下来的一个问题-----注入模型. 文章目录 前言: 自动注入: 自动注入 ...
- layui前端框架实例(修复官网数据接口异常问题)
layui前端框架实例,官网的实例会提示数据接口异常,已修复. 主要是修改数据表格,做一个可以用的实例,可以选中,编辑,删除等. gitee地址:https://gitee.com/pingg2019 ...
- 学习phalcon框架按照官网手册搭建第一个项目注册功能
中文手册官网:http://phalcon.ipanta.com/1.3/tutorial.html#bootstrap 官网提供http://www.tutorial.com项目源码github地址 ...
- Spring官网阅读(九)Spring中Bean的生命周期(上)
文章目录 生命周期回调 1.Bean初始化回调 2.Bean销毁回调 3.配置默认的初始化及销毁方法 4.执行顺序 5.容器启动或停止回调 Lifecycle 接口 LifecycleProcesso ...
随机推荐
- win10配置jdk环境变量
备注:这里以jdk-10.0.2_windows-x64_bin为例 1.jdk安装目录如下 2.右键“此电脑”-点击“属性”-点击“高级系统设置”-点击“环境变量”-选中“Path”-点击“编辑” ...
- 【PHP】使用PHP抓取Bing每日图像并为己所用
Bing搜索的首页每天都会推送一张很漂亮的图片,把它保存下来,当做电脑桌面或是自己的网站背景图还不是美滋滋…… 今天的bing图片是这样的 既然要抓取这张图片,首先就得弄清这张图是从何而来的.经过对必 ...
- LayIM聊天框全屏根据浏览器高宽自适应
个人博客 地址:http://www.wenhaofan.com/article/20190410190628 问题 由于LayIM没有处理聊天框在全屏状态下根据浏览器缩放处理高宽,所以会导致在浏览器 ...
- 基于EFCore3.0+Dapper 封装Repository
Wei.Repository 基于EFCore3.0+Dapper 封装Repository,实现UnitOfWork,提供基本的CURD操作,可直接注入泛型Repository,也可以继承Repos ...
- Winfom递归绑定树节点
/// <summary> /// 绑定树节点 /// </summary> /// <param name="pid"></param& ...
- Windows Live Writer 2012 安装配置
Windows Live Writer 2012用起来比较舒服,可以直接编辑 在线博客文章 下载地址 http://g.live.com/1rewlive5-all/zh-cn/wlsetup-all ...
- 在java中调用mockjs生成模拟数据
一.手写版 在前端有个模拟数据的神器 Mock.js 能生成随机数据,拦截 Ajax 请求,然后我觉得他的这个生成随机数据不错.然后我就到度娘一顿操作,没找到类似的java实现,于是就有了下面的代码: ...
- pymysql 连接池
pymysql连接池 import pymysql from DBUtils.PooledDB import PooledDB, SharedDBConnection ''' 连接池 ''' clas ...
- Selenium3+python自动化011-unittest生成测试报告(HTMLTestRunner)
批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的. unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTest ...
- C++——标准模板库
1.泛型程序设计:将程序尽可能写的通用,将算法从特定的数据结构中抽象出来,成为通用的:C++模板为泛型程序设计奠定了关键的基础:STL是泛型程序设计的一个范例:容器container.迭代器itera ...