`

logback官方reference摘要

阅读更多
最近在读logback的源码,读到appender的部分,感到有点梳理不清楚,所以先看看官方的用户指南reference,帮助一下理解,以下是reference的摘要:

logger L的有效级别等于其层次等级里的第一个非null级别,顺序是从L开始,向上直至根logger

为确保所有logger都能够最终继承一个级别,根logger总是有级别,默认情况下,这个级别是DEBUG

记录请求级别为p,其logger的有效级别为q,只有则当p>=q时,该请求才会被执行
该规则是logback的核心。级别排序为:TRACE < DEBUG < INFO < WARN < ERROR

用同一名字调用LoggerFactory.getLogger方法所得到的永远都是同一个logger对象的引用。因此,可以配置一个logger,然后从其他地方取得同一个实例,不需要到处传递引用

Logback不限制logger名,可以随意命名logger。然而,目前已知最好的策略是以logger所在类的名字作为logger名称

一个logger可以被关联多个appender

Logger L的记录语句的输出会发送给L及其祖先的全部appender。这就是“appender叠加性”的含义。

然而,如果logger L的某个祖先P设置叠加性标识为false,那么,L的输出会发送给L与P之间(含P)的所有appender,但不会发送给P的任何祖先的appender

如果Logger L自己的叠加性标识为false,那么L的输出只会发送给自己的appender,不会发送给L的任何祖先的appender

1. 取得过滤链(filter chain)的判定结果
如果TurboFilter链存在,它将被调用。Turbo filters能够设置一个上下文范围内的临界值,这个临界值或者表示过滤某些与信息有关(比如Marker、级别、Logger、消息)的特定事件,或者表示与每个记录请求相关联的Throwable。如果过滤链的结果是FilterReply.DENY,则记录请求被抛弃。如果结果是FilterReply.NEUTRAL,则继续下一步,也就是第二步。如果结果是FilterReply.ACCEPT,则忽略过第二步,进入第三步

2. 应用基本选择规则
Logback对logger的有效级别与请求的级别进行比较。如果比较的结果是记录请求被禁用,logback会直接抛弃请求,不做任何进一步处理。否则,继续下一步

3. 创建LoggingEvent对象
记录请求到了这一步后,logback会创建一个ch.qos.logback.classic.LoggingEvent对象,该对象包含所有与请求相关的参数,比如请求用的logger、请求级别、消息、请求携带的异常、当前时间、当前线程、执行记录请求的类的各种数据,还有MDC。注意有些成员是延迟初始化的,只有当它们真正被使用时才会被初始化。MDC用来为记录请求添加额外的上下文信息。之后的章节会讨论MDC

4. 调用appender
创建了LoggingEvent对象后,logback将调用所有可用appender的doAppend()方法,这就是说,appender继承logger的上下文。
所有appender都继承AppenderBase抽象类,AppenderBase在一个同步块里实现了doAppend方以确保线程安全。AppenderBase的doAppender()方法也调用appender关联的自定义过滤器,如果它们存在的话。自定义过滤器能被动态地关联到任何appender,另有章节专门讲述它

5. 格式化输出
那些被调用了的appender负责对记录事件(LoggingEvent)进行格式化。然而,有些但不是全部appender把格式化记录事件的工作委托给layout。Layout对LoggingEvent实例进行格式化,然后把结果以字符串的形式返回。注意有些appender,比如SocketAppender,把记录事件进行序列化而不是转换成字符串,所以它们不需要也没有layout

6. 发送记录事件(LoggingEvent)
记录事件被格式化后,被各个appender发送到各自的目的地

Logback采取下面的步骤进行自我配置:
1. 尝试在classpath下查找文件logback-test.xml;
2. 如果文件不存在,则查找文件logback.xml;
3. 如果两个文件都不存在,logback用BasicConfigurator自动对自己进行配置,这会导致记录输出到控制台

Logback把内部数据放在一个StatusManager对象里,并通过LoggerContext访问

Logger是用<logger>元素配置的。<logger>元素有且仅有一个name属性、一个可选的level属性和一个可选的additivity属性

<logger>元素可以包含零个或多个<appender-ref>元素,表示这个appender会被添加到该logger

Appender用<appender>元素配置,该元素必要属性name和class

<appender>元素可以包含零个或多个<layout>元素、零个或多个<encoder>元素和零个或多个<filter>元素

<layout>元素的class属性是必要的,表示将被实例化的layout类的全限定名。因为太常用了,所以当当layout是PatternLayout时,可以省略class属性

<encoder>元素class属性是必要的,表示将被实例化的encoder类的全限定名。因为太常用了,所以当当encoder是PatternLayoutEncoder时,可以省略class属性

默认情况下,appender是可累积的:logger会把记录输出到它自身的appender和它所有祖先的appender。因此,把同一appender关联到多个logger会导致重复输出

doAppend()方法也许是logback框架里最重要的方法,它负责以适当的格式将记录事件输出到合适的设备

所以能被引用。Appender接口扩展了FilterAttachable接口,因此appender实例可被关联一个或多个过滤器

Appender是最终负责输出记录事件的组件。然而,它们可以把实际格式化的任务委托给Layout或Encoder对象。每个layout/encoder都关联到一个且仅一个appender。有些appender有内置的或固定的事件格式,因此它们不需要也没有layout/encoder

doAppend()方法然后调用派生类的append()方法,此方法真正把事件增加到合适的设备

Encoder负责两件事,一是把事件转换为字节数组,二是把字节数组写入输出流

目前,PatternLayoutEncoder是唯一有用的encoder,它基本上是封装了PatternLayout,让PatternLayout负责大多数工作。因此,似乎encoder并没有带来多少好东西,反而只有不需要的复杂性。然而,我们希望当新的、强大的encoder到来时,这种印象会改变

Layout负责把事件转换成字符串

Logback的过滤器基于三值逻辑(ternary logic),允许把它们组装或成链,从而组成任意的复合过滤策略

Logback-classic提供两种类型的过滤器:常规过滤器和TuroboFilter过滤器

TurboFilter对象被绑定到记录上下文。因此,不仅当指定的appender被使用时会调用TurboFilter,而且每次执行记录请求时也会调用它们。它们的作用范围(scope)比关联到appender的过滤器大。
更重要的是,它们在LoggingEvent创建之前被调用。TurboFilter对象过滤记录请求时不需要先初始化记录事件。TurboFilter是用来高性能地过滤记录事件的,设置可以发生在记录事件被创建之前

在logback里,每个logger对象都是由LoggerContext制造的,只要logger对象还存活于内存,它就始终关联到LoggerContext
分享到:
评论
2 楼 kyfxbl 2014-06-03  
杨瑞敏 写道
大哥你好:
    是不是logback只在classpath中找配置文件,如果把logback.xml文件放在其他路径,比如项目的根目录,应该如何设置,谢谢!


默认就是在classpath下查找的。如果你要放在别的地方,那么有2个办法:

1、将你放配置文件的路径,指定到classpath里
2、写代码,手抖加载logback配置文件

明显都不太方便,实际上,logback的配置文件,我觉得放在根目录下也没问题的
1 楼 杨瑞敏 2014-05-29  
大哥你好:
    是不是logback只在classpath中找配置文件,如果把logback.xml文件放在其他路径,比如项目的根目录,应该如何设置,谢谢!

相关推荐

    logback官方中文版文档.pdf

    Logback 是一个专门为Java应用程序设计的日志框架,由log4j的创始人Ceki Gülcü设计,旨在提高日志处理的效率和灵活性。它在性能和资源消耗方面优于log4j和其他日志系统,提供了许多独特的特性,如Marker、参数化...

    logback官方中文版文档

    这个文档集是 Logback 的官方中文版,提供了详细的使用指南和技术参考。 **logback-core** logback-core 是整个框架的基础,它提供了日志处理的基本机制。包括事件处理、配置解析、Appender(日志输出器)和 ...

    logback官方文档+jar包

    **Logback 概述** Logback 是一个 Java 平台上的日志框架,由 Ceki Gülcü 创建,作为 Log4j 的继任者。它致力于提供高效、灵活且无侵入的日志记录解决方案。Logback 由三个主要组件构成:logback-core、logback-...

    logback中文文档pdf

    Logback 主要分为三个组件:logback-core、logback-classic 和 logback-access。logback-core 提供基础架构,而 logback-classic 实现了经典的 SLF4J(Simple Logging Facade for Java)API,并包含一个名为...

    Logback中文文档-实用

    Logback是Java中一个非常流行的日志记录库,它是log4j的替代者,由log4j创始人之一Ceki Gülcü编写。Logback中文文档是一份关于Logback使用和配置的全面指南,它提供了深入的理论知识和实用的API应用,覆盖了...

    Logback类库含logback.xml配置文件

    Logback 是一个流行的 Java 日志框架,由 Ceki Gülcü 创建,他是早期日志框架 Log4j 的主要开发者。Logback 是为了提供更高效、更灵活的日志记录解决方案而设计的,它不仅继承了 Log4j 的优点,还解决了一些性能和...

    logback下载 日志文件jar包

    Logback 是一款广泛使用的日志记录框架,由 Ceki Gülcü 创建,作为其先前作品 Log4j 的改进版。这个压缩包包含了实现 Logback 功能所需的几个关键组件,以及一个配置文件,使得用户能够方便地管理和记录应用程序的...

    logback所需jar包

    **日志框架Logback** 日志是任何软件系统中至关重要的组成部分,它为开发者提供了运行时的调试信息、错误报告以及性能分析数据。在Java世界里,Logback是一款高效、可配置的日志记录框架,由Ceki Gülcü(也是log4...

    logback.的jar包

    **日志框架Logback简介** Logback 是一个用于日志记录的开源框架,由 Ceki Gülcü(也是 Log4j 的创始人)设计并开发。它作为 Log4j 的升级版,提供了更高的性能和更丰富的功能。Logback 分为三个主要组件:...

    Logback框架需要的3个jar包和logback.xml文件

    Logback 是一个在Java应用程序中广泛使用的日志记录框架,它是对早期的log4j框架的一个升级和扩展。Logback 提供了高效、灵活的日志记录解决方案,支持多种日志级别,如DEBUG、INFO、WARN、ERROR等,帮助开发者调试...

    logback jar包和logback.xml配置文件打包下载 小白新手学Java

    在这里,我们关注的是SLF4J的API库`slf4j-api-1.7.26.jar`,以及Logback的两个核心组件`logback-core-1.2.3.jar`和`logback-classic-1.2.3.jar`,以及配置文件`logback.xml`。 首先,`slf4j-api-1.7.26.jar`是SLF4J...

    Logback所需的jar包

    免费获取Logback所需的jar包 打包合集 让你少走弯路 一.logback简介 1.logback: Logback是由log4j创始人设计的另一个开源日志组件。(好的日志记录方式可以提供我们足够多的定位错误的依据)。 2.主要有三个模块...

    Logback日志系统文件

    分享的文件包括Logback的相关jar包和核心配置文件。 Logback是由log4j创始人设计的另一个开源日志组件,基于slf4j的日志规范实现的框架,性能比log4j要好。 Logback主要分为三个技术模块: logback-core:该模块为...

    logback 中文手册

    Logback非常自然地实现了 SLF4J,不需要像 Log4j 和 JUL 那样加一个适配层。Spring Boot 的默认日志框架使用的是 Logback。支持自动重新加载配置文件,不需要另外创建扫描线程来监视。PDF 共 200 页,非常全面。

    logback

    **标题:“logback”** **描述:** 在IT领域,logback是一个广泛使用的日志记录框架,由Ceki Gülcü创建,它是log4j的后续项目,旨在提供更高的性能和更灵活的配置。Logback的主要目标是提高日志处理的效率,同时...

    logback1.2.3

    标题“logback1.2.3”和描述中的文件名暗示了这是一个关于Logback日志框架的版本1.2.3的资源包,其中包含了Logback的经典实现(logback-classic)和核心库(logback-core),以及Simple Logging Facade for Java ...

    Slf4j+logback实现logback测试

    **Slf4j与Logback简介** Slf4j(Simple Logging Facade for Java)是一个日志门面,它提供了一个统一的API,允许开发者选择合适的日志框架,如Logback、Log4j等,而无需修改代码。Slf4j的主要目标是为各种日志框架...

    logback类库.rar

    《logback类库详解》 在Java开发领域,日志管理是不可或缺的一部分,它帮助开发者追踪应用程序的运行状态,定位和解决问题。Logback是其中一个广泛使用的日志框架,由Ceki Gülcü创建,它是对log4j的一个升级版本...

    logback的jar文件

    本文将详细介绍logback的三个核心jar文件:logback-classic-1.1.7.jar、logback-core-1.1.7.jar和slf4j-api-1.7.21.jar,以及它们在日志处理中的作用。 1. **logback-classic-1.1.7.jar** logback-classic是...

    logback日志记录写入kafka

    Logback允许用户通过实现`ch.qos.logback.core.UnsynchronizedAppenderBase`或`ch.qos.logback.core.AppenderBase`类并覆盖`append()`方法来自定义日志处理逻辑。例如,我们可以解析JSON格式的日志,从中提取关键...

Global site tag (gtag.js) - Google Analytics