<logger>和<root>
<logger>用来设置某一个包或者具体一个类的日志打印级别、以及制定<appender>。<logger>可以包含零个或者多个<appender-ref>元素,标识这个appender将会添加到这个logger。<logger>仅有一个name属性、一个可选的level属性和一个可选的additivity属性:
1、name:用来指定受此logger约束的某一个包或者具体的一个类。
2、level:用来设置打印级别,五个常用打印级别从低到高一次为TRACE、DEBUG、INFO、WARN、ERROR,如果未设置此级别,那么logger将会继承上级的级别。
3、additivity:是否向上级logger传递打印信息,默认为true。
<root>也是<logger>元素,但它是根logger,只有一个level属性,因为它的name就是ROOT,具体可看源码LoggerContext:
public LoggerContext() {
super();
this.loggerCache = new ConcurrentHashMap<String, Logger>();
this.loggerContextRemoteView = new LoggerContextVO(this);
this.root = new Logger(Logger.ROOT_LOGGER_NAME, null, this);
this.root.setLevel(Level.DEBUG);
loggerCache.put(Logger.ROOT_LOGGER_NAME, root);
initEvaluatorMap();
size = 1;
this.frameworkPackages = new ArrayList<String>();
}
Logger的构造函数为:
Logger(String name, Logger parent, LoggerContext loggerContext) {
this.name = name;
this.parent = parent;
this.loggerContext = loggerContext;
}
将logback.xml配置为:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</layout>
</appender> <root level="info">
<appender-ref ref="STDOUT" />
</root> </configuration>
root将打印级别设置为“info”级别,<appender>暂时不管
编写代码来测试:
public class Slf4jTest {
@Test
public void testSlf4j() {
Logger logger = LoggerFactory.getLogger(Object.class);
logger.trace("=====trace=====");
logger.debug("=====debug=====");
logger.info("=====info=====");
logger.warn("=====warn=====");
logger.error("=====error=====");
}
}
控制台的输出:

logback.xml的意思是,当Test方法运行时,root节点将日志级别大于等于info的交给已经配置好的名为"STDOUT"的<appender>进行处理,"STDOUT"将信息打印到控制台上。
<logger>节点的作用,logback.xml修改后,加入一个只有name属性的<logger>:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</layout>
</appender> <logger name="java" /> <root level="debug">
<appender-ref ref="STDOUT" />
</root> </configuration>
注意这个name表示的是LoggerFactory.getLogger(XXX.class),XXX的包的路径,包路径越少越是父级,测试代码中是Object.class,即name=“java”是name=“java.lang”的父级,root是所有<logger>的父级。
测试没有达到预期结果:
2018-03-27 23:02:02.963 [main] DEBUG java.lang.Object - =====debug=====【没有打印】
2018-03-27 23:02:02.965 [main] INFO java.lang.Object - =====info=====
2018-03-27 23:02:02.966 [main] WARN java.lang.Object - =====warn=====
2018-03-27 23:02:02.966 [main] ERROR java.lang.Object - =====error===== 出现逾期结果的原因:
1、<logger>中没有配置level,即继承父级的level,<logger>的父级为<root>,那么level=debug
2、没有配置additivity,那么additivity=true,表示此<logger>的打印信息向父级<root>传递
3、没有配置<appender-ref>,表示此<logger>不会打印出任何信息。
<logger>和<root>的更多相关文章
- logback 配置详解(一)——logger、root
1.根节点<configuration>包含的属性 scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文件 ...
- logback 配置详解——logger、root
目录 1.根节点包含的属性 2.根节点的子节点 2.1.设置上下文名称: 2.2.设置loger.root 正文 回到顶部 1.根节点<configuration>包含的属性 scan: ...
- Log4J:Log4J三大组件:Logger+Appender+Layout 格式化编程详解
快速了解Log4J Log4J的三个组件: Logger:日志记录器,负责收集处理日志记录 (如何处理日志) Appender:日志输出目的地,负责日志的输出 (输出到什么 地方) Layo ...
- Spring MVC源码——Root WebApplicationContext
目录 Spring MVC源码--Root WebApplicationContext 上下文层次结构 Root WebApplicationContext 初始化和销毁 ContextLoaderL ...
- logger(三)log4j2简介及其实现原理
一.log4j2简介 log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步.等等),使得日志的吞吐量.性能比log4j 1.x提高10倍,并解决了一些死锁的bug, ...
- Arthas 3.1.2 版本发布 | 增加 logger/heapdump/vmoption 命令
最近偶尔有用户反馈某些 HTTP 接口出现超时问题,而 web 服务端的 Trace 监控没有出现 http 返回值为 503 等异常情况.出现这种情况一般是web容器出现问题,客户端连 Arthas ...
- SpringMVC Root WebApplicationContext启动流程
传统的SpringMVC项目中,需要在web.xml中配置Contextlistener.ContextLoaderListener是负责引导启动和关闭Spring的Root上下文的监听器.主要将处理 ...
- 【线上问题排查技巧】动态修改LOGGER日志级别
前言 大多数情况下,我们会在打印日志时定义日志的LOGGER级别,用来控制输出的信息范围. 一方面,过多的输出会影响查看日志的效率,另一方面,过少的日志让问题定位变得困难. 但当线上出现问题时,线上容 ...
- 深入分析Spring 与 Spring MVC容器
1 Spring MVC WEB配置 Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext, ...
随机推荐
- GridView 高亮某一行
<script type="text/javascript"> $(document).ready(function () { $("#GridView tr ...
- 线程池和Thread
1.线程池 创建线程需要时间.如果有不同的短任务要完成,就可以事先创建许多线程,在应完成这些任务时发出请求.这个线程数最好在需要更多线程时增加,在需要释放资源时减少.不需要自己创建这样一个列表.该列表 ...
- Unity 分场景打包
分场景打包步骤:导入unity中AB包后 1: 指定场景 2: 指定abname 3: 指定objinabname 4: 协同 5: 委托 void string unity 先引入命名空间 ...
- elementary os变成mac风(笔记)
sudo add-apt-repository ppa:philip.scott/elementary-tweaks && sudo apt-get update sudo apt-g ...
- poj2689(素数区间筛法模板)
题目链接: http://poj.org/problem?id=2689 题意: 给出一个区间 [l, r] 求其中相邻的距离最近和最远的素数对 . 其中 1 <= l < r < ...
- 《算法竞赛进阶指南》1.4Hash
137. 雪花雪花雪花 有N片雪花,每片雪花由六个角组成,每个角都有长度. 第i片雪花六个角的长度从某个角开始顺时针依次记为ai,1,ai,2,-,ai,6. 因为雪花的形状是封闭的环形,所以从任何一 ...
- Windows 命令行方式打印和设置变量
echo %PATH% http://blog.csdn.net/snlei/article/details/7211770
- Jmeter 自动化测试报告扩展(转 Todo 需要修正)
首先了解下生成测试报告的过程,我们看到的测试报告是由.jtl格式转换为.html,html报告的样式由extras目录下xsl文件决定.优化测试报告需要分为两部分内容,首先我们要优化输出的测试内容,其 ...
- C# JObject将json字符串转为json对象
static void Main(string[] args) { string json = "{\"name\": \"测试\",\"m ...
- Power BI
前几天,Excel 2016悄悄更新了一个功能:将工作簿上载到Power BI 但这新功能并不显眼,藏在[发布]里: 然而,按照微软的一贯风格,功能隐藏越深,装逼效果越佳.你看“ Power Bi ” ...