阅读Logback文档笔记--LogBack架构
2016-07-13 13:01
471 查看
Logger, Appenders and Layouts
Logback构建在三个主要的类上面:Logger, Appender and Layouts
三个组件决定了日志的类型,格式,以及输出目的地
Logger类定义在loback-classic模块中, Appender 跟 Layout接口则定义在logback-core中,作为一个通用的模块,loback-core中没有Logger的概念。
日志等级Level的传递性
如果日志没有赋予level,则该Logger会从父Logger继承日志等级,父子关系如同java的包名:x.y作为x的子logger
如下
日志输出的等级规定:
ch.qos.logback.classic.Logger logger =
(ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.foo");
//日志等级被设置成了INFO
logger.setLevel(Level. INFO);
//该日志请求被允许,因为WARN的级别大于INFO
logger.warn("Low fuel level.");
// 该日志请求被拒绝,因为DEBUF小于INFO
logger.debug("Starting search for nearest gas station.");
Appender的叠加性
一个Appender就相当于一个日志输出目的地。一个Logger中被允许的日志请求,将会被转发到所有Appender上,包括该Logger的父Logger的Appender上,换句话说,Appender具有叠加性,如果Additivity Flag未被设置成false,日志将会向上输出。而Additivity Flag默认为True。
说明表如下
采用何种日志输出编码
第一种(效率低):先对参数进行处理 。如果logger的日志级别不允许debug日志请求时,就做了无用功
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
第二种(麻烦):先判断,在处理
if(logger.isDebugEnabled()) {
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}
第三种(推荐):内置先判断,再处理
logger.debug("The new entry is {}. It replaces {}.", entry, oldEntry);
//N多个参数,也可以使用数据对象
Object[] paramArray = {newVal, below, above};
logger.debug("Value {} was inserted between {} and {}.", paramArray);
Logger是如何运行的
Logback构建在三个主要的类上面:Logger, Appender and Layouts
三个组件决定了日志的类型,格式,以及输出目的地
Logger类定义在loback-classic模块中, Appender 跟 Layout接口则定义在logback-core中,作为一个通用的模块,loback-core中没有Logger的概念。
日志等级Level的传递性
如果日志没有赋予level,则该Logger会从父Logger继承日志等级,父子关系如同java的包名:x.y作为x的子logger
如下
Logger name | Assigned level | Effective level |
---|---|---|
root | DEBUG | DEBUG |
X | INFO | INFO |
X.Y | none | INFO |
X.Y.Z | ERROR | ERROR |
日志能输出的等级 | Logger有效等级 | |||||
TRACE | DEBUG | INFO | WARN | ERROR | OFF | |
---|---|---|---|---|---|---|
TRACE | YES | NO | NO | NO | NO | NO |
DEBUG | YES | YES | NO | NO | NO | NO |
INFO | YES | YES | YES | NO | NO | NO |
WARN | YES | YES | YES | YES | NO | NO |
ERROR | YES | YES | YES | YES | YES | NO |
(ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.foo");
//日志等级被设置成了INFO
logger.setLevel(Level. INFO);
//该日志请求被允许,因为WARN的级别大于INFO
logger.warn("Low fuel level.");
// 该日志请求被拒绝,因为DEBUF小于INFO
logger.debug("Starting search for nearest gas station.");
Appender的叠加性
一个Appender就相当于一个日志输出目的地。一个Logger中被允许的日志请求,将会被转发到所有Appender上,包括该Logger的父Logger的Appender上,换句话说,Appender具有叠加性,如果Additivity Flag未被设置成false,日志将会向上输出。而Additivity Flag默认为True。
说明表如下
Logger Name | Attached Appenders | Additivity Flag | Output Targets | Comment |
---|---|---|---|---|
root | A1 | not applicable | A1 | Since the root logger stands at the top of the logger hierarchy, the additivity flag does not apply to it. |
x | A-x1, A-x2 | true | A1, A-x1, A-x2 | Appenders of "x" and of root. |
x.y | none | true | A1, A-x1, A-x2 | Appenders of "x" and of root. |
x.y.z | A-xyz1 | true | A1, A-x1, A-x2, A-xyz1 | Appenders of "x.y.z", "x" and of root. |
security | A-sec | false | A-sec | No appender accumulation since the additivity flag is set to false. Only appender A-sec will be used. |
security.access | none | true | A-sec | Only appenders of "security" because the additivity flag in "security" is set to false. |
第一种(效率低):先对参数进行处理 。如果logger的日志级别不允许debug日志请求时,就做了无用功
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
第二种(麻烦):先判断,在处理
if(logger.isDebugEnabled()) {
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}
第三种(推荐):内置先判断,再处理
logger.debug("The new entry is {}. It replaces {}.", entry, oldEntry);
//N多个参数,也可以使用数据对象
Object[] paramArray = {newVal, below, above};
logger.debug("Value {} was inserted between {} and {}.", paramArray);
Logger是如何运行的
相关文章推荐
- 【抚琴煮酒】我们的网站压力究竟在哪里?
- 腾讯微信技术总监周颢:一亿用户增长背后的架构秘密
- 杭州有赞公司招聘 资深PHP开发工程师(平台架构方向)、技术专家
- DiscuzX2.5 程序底层架构
- Android4.2.2 Camer系统架构图(HAL和回调处理)
- Android Camera API2.0下全新的Camera FW/HAL架构简述
- Android Camera 架构
- Writing an alsa driver译文-第一章 文件树架构
- J2EE 领域的一些技术框架结构图
- 博乐理科教育—Web网站企划_1
- Android的平台架构及特性
- HTML5菜鸟学习网站
- Hive环境、架构、搭建、安装
- MapReduce环境、原理、架构及操作
- 网站制作与发布简明教程
- 移动平台3G手机网站前端开发布局技巧汇总
- 添物零基础到架构师(基础篇) - JavaScript
- 添物零基础到架构师(基础篇) - JavaScript
- 如何提高网站的访问速度?
- 浅谈数据仓库的基本架构