咸宁网站seo排名,微信 host 微网站模版,专业管网建设服务,小公司自己怎样做网站深入探索Logback日志框架的原理分析和开发实战指南系列 Logback日志框架Logback基本模块logback-corelogback-classiclogback-accessLogback的核心类LoggerAppenderLayoutLayout和Appender filterlogback模块和核心所属关系 Logbackj日志级别日志输出级别日志级别介绍 Logback的… 深入探索Logback日志框架的原理分析和开发实战指南系列 Logback日志框架Logback基本模块logback-corelogback-classiclogback-accessLogback的核心类LoggerAppenderLayoutLayout和Appender filterlogback模块和核心所属关系 Logbackj日志级别日志输出级别日志级别介绍 Logback的maven依赖Logback的Logger详细介绍Root根上下文Root元素的属性包括 Logger配置案例 Logback的Filter详细介绍Regular FilterTurbo Filter常见的过滤器LevelFilter属性具体用法介绍具体案例分析 EvaluatorFilter属性具体用法介绍 ThresholdFilter具体用法介绍 本文总结 Logback日志框架
“Logback是一个开源的日志组件它的设计者也是Log4j的作者。相比于Log4j”它拥有更好的特性因此成为了一个取代Log4j的优秀的日志框架。如果您正寻找一款优秀的日志组件那么Logback将是一个不错的选择。
Logback基本模块 logback-core
logback-core是logback日志系统的核心组件提供了基础结构如Loggers、Appenders、Layouts、Filters等等用于创建、配置和管理logback事件。它是logback的最底层组件为其他组件提供支持但使用者通常不需要直接使用它而是通过更高级别的logback组件使用它的功能。
logback-classic
logback-classic是logback日志系统的核心实现基于logback-core提供了更高级别和更易用的API及强大的日志框架功能如异步日志、日志分级、Logger上下文等等。它还支持SLF4J提供符合JDK标准的Java日志框架API接口同时也具备logback自身的特性。因此logback-classic是使用logback的主要方式也是logback日志系统的经典实现。
logback-access
logback-access是logback日志系统的其中一个模块专为记录web应用程序的访问日志而设计。它类似于访问日志分析工具可帮助开发人员深入了解客户端请求、服务器响应和应用程序运行状态以便进行调整和优化。logback-access能够自动捕捉HTTP请求和响应对象提供多种配置选项定制记录内容和格式化方式。此外它与logback-classic能够很好地配合使用将应用程序访问日志和其他日志信息记录到同一文件中方便管理和分析。
Logback的核心类 Logger
在Logback-classic模块中日志记录器负责记录日志并将其关联到应用程序的上下文中以便存储日志对象。此外日志记录器还可用于定义日志的级别和类型。
Appender
在Logback-core模块中主要作用是指定日志输出的目标地点包括但不限于控制台、文件、远程套接字服务器、MySQL、PostreSQL、Oracle数据库、以及其他数据库、JMS和远程UNIX Syslog守护进程。
Layout
在Logback-core模块中日志布局Log Layout子模块负责将事件转换成字符串并格式化日志信息的输出。如果需要进一步了解布局的详细信息可以参考Log4j的布局Layout模块以获得更深入的理解。
Layout和Appender
Appender和Layout实现与Logger分离它们不依赖Logger也不受Logger的影响。但是如此才能够保证日志信息能够正常打印出来Logger需要依赖于Appender和Layout的协作。
filter
Filter主要应用于Appender用于过滤与日志相关的信息并仅在Appender级别生效主要用于控制的日志的可见性功能问题和管理。
logback模块和核心所属关系 Logbackj日志级别
Logback 日志框架共有5种级别分别为 TRACE 、 DEBUG 、 INFO 、 WARN 、 ERROR这些级别均被定义在ch.qos.logback.classic.Level类中。
日志输出级别
日志级别可以分为五个等级从低到高依次为TRACE DEBUG INFO WARN ERROR。 从上面可以看出等级高的级别可见性越大举一个案例TRACE级别最低所以说它可以看到的范围只能是它的级别但是DEBUG级别的范围日志则看到的是DEBUGTRACE这两个级别范围的日志数据一次类推即可。
日志级别介绍
日志级别可以从低到高分为
TRACE用于输出程序运行时的详细信息一般在调试程序时使用。DEBUG用于输出调试信息可以用来判断代码是否按预期执行。INFO用于输出一些重要的运行时信息可以用来确认程序运行是否正常。WARN用于输出一些警告信息不影响程序的运行但需要进行注意。ERROR用于输出错误信息会影响到程序运行。
此外还有两个特殊的日志级别
OFF表示关闭全部日志。ALL表示开启全部日志。
Logback的maven依赖
dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversionx.y.z/version
/dependency
dependencygroupIdch.qos.logback/groupIdartifactIdlogback-core/artifactIdversionx.y.z/version
/dependency
dependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversionx.y.z/version
/dependencyLogback的Logger详细介绍
在logback中可以使用logger元素来定义一个日志输出器。logger元素的设置包括多个属性其中包括
name指定该logger的名称。level指定该logger的日志级别。additivity指示是否遵循缺省机制。
在additivity属性中常见的有两种值
true代表遵循缺省机制即该logger和它的祖先logger都会被输出日志。false代表该logger不遵循缺省机制只有该logger会输出日志而其祖先logger不会输出。
在logback中还有一个特殊的logger叫做Root Logger它是所有logger的祖先logger。如果想要改变所有logger的默认行为可以修改Root Logger的设置。
Root根上下文 使用Root元素可以为logback定义一个日志输出器。 Root元素的属性包括 name: 定义logger的名字以便被后文引用additivity: 取值为true默认或false用于控制logger是否继承父logger的属性level定义该logger的日志级别按照从低到高为All Trace Debug Info Warn Error Fatal OFF。appender-refRoot的子节点用于指定该日志输出到哪个Appender通过ref指定。
Logger
可以使用Logger节点单独指定日志形式。它包括以下属性
name用于指定该Logger所适用的类或者类所在的包全路径继承自Root节点。additivity用于控制Logger是否继承父Logger的属性。level用于设置日志输出级别共有8个级别按照从低到高为All Trace Debug Info Warn Error Fatal OFF。appender-ref是Logger的子节点用来指定该日志输出到哪个Appender。如果没有指定就会默认继承自Root。如果指定了日志将会在指定的这个Appender和Root的Appender中都会输出。此时可以设置Logger的additivity“false”只在自定义的Appender中进行输出。
配置案例
loggers!--默认的root的logger--root levelDEBUGappender-ref refConsole/appender-ref refRollingFileInfo/appender-ref refRollingFileWarn/appender-ref refRollingFileError/appender-ref refRollingFileDebug//root!--额外配置的logger--!--记录druid-sql的记录--logger namedruid.sql.Statement leveldebug additivityfalseappender-ref refdruidSqlRollingFile//logger!--log4j2 自带过滤日志--Logger nameorg.apache.catalina.startup.DigesterFactory levelerror /Logger nameorg.apache.catalina.util.LifecycleBase levelerror /Logger nameorg.apache.coyote.http11.Http11NioProtocol levelwarn /logger nameorg.apache.sshd.common.util.SecurityUtils levelwarn/Logger nameorg.apache.tomcat.util.net.NioSelectorPool levelwarn /Logger nameorg.crsh.plugin levelwarn /logger nameorg.crsh.ssh levelwarn/Logger nameorg.eclipse.jetty.util.component.AbstractLifeCycle levelerror /Logger nameorg.hibernate.validator.internal.util.Version levelwarn /logger nameorg.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration levelwarn/logger nameorg.springframework.boot.actuate.endpoint.jmx levelwarn/logger nameorg.thymeleaf levelwarn/
/loggers如果logger没有被分配级别name它将从有被分配级别的最近的父类那里继承级别root logger默认级别是DEBUG。 日志输出的时候级别大的会输出根据当前ROOT级别日志输出时级别高于root默认的级别时会输出比如如果root的级别是info那么会输出info以及info级别以上的日志。
Logback的Filter详细介绍
Logback提供了两类过滤器Regular Filter和Turbo Filter。
Regular Filter
Regular Filter主要应用于Appender上并且只在Appender级别起作用。Appender实例上可以绑定一个Regular Filter实例链。Regular Filter继承实现“ch.qos.logback.core.filter.Filter”类自定义自己的Regular Filter需要继承“ch.qos.logback.core.filter.Filter”类并实现decide()方法。
Turbo Filter
Turbo Filter对象绑定到日志记录上下文因此不仅在使用给定的Appender时调用它们而且每次都会发出日志记录请求。它们的范围比附加到Appender的过滤器更宽。更重要的是它们在LoggingEvent对象创建之前被调用。Turbo Filter对象不需要实例化日志记录事件来过滤日志记录请求。因此Turbo Filter旨在用于记录事件的高性能过滤甚至在创建事件之前。要实现该类型的过滤器需要继承“ch.qos.logback.classic.turbo.TurboFilter”。
常见的过滤器
在logback中经常使用3种常见的过滤器。
LevelFilter
级别过滤器Level Filter根据日志级别进行过滤。当日志级别与配置级别相同时过滤器根据onMatch和onMismatch属性的配置来接收或拒绝日志事件。
根据精确的级别匹配过滤事件的是LevelFilter。如果事件的级别等于配置的级别则过滤器接受或拒绝该事件具体取决于onMatch和onMismatch属性的配置。
属性
level:设置过滤级别onMatch:用于配置符合过滤条件的操作onMismatch:用于配置不符合过滤条件的操作
具体用法介绍
如果日志级别等于配置的级别在满足onMatch设置的条件时LevelFilter会接受该日志反之在满足onMismatch设置的条件时LevelFilter会拒绝该日志。
具体案例分析
将过滤器的日志级别配置为INFO所有等于INFO级别的日志交给appender处理不等于INFO级别的日志被过滤掉。
appender nameCONSOLE classch.qos.logback.core.ConsoleAppender
filter classch.qos.logback.classic.filter.LevelFilter levelINFO/level onMatchACCEPT/onMatch onMismatchDENY/onMismatch
/filter
encoder pattern %-4relative [%thread] %-5level %logger{30} - %msg%n /pattern
/encoder
/appenderEvaluatorFilter
求值过滤器EventEvaluator用于评估、鉴别日志是否符合指定条件。它会评估给定的日志事件是否满足设定的条件如果匹配或不匹配则托管的EvaluatorFilter将分别返回在onMatch或onMismatch属性中指定的值。
需要注意的是EventEvaluator是一个抽象类。若想实现自己的事件评估逻辑可以通过对EventEvaluator进行子类化来实现。
属性
evaluator:鉴别器通常用于过滤日志事件其中常用的鉴别器是JaninoEventEvaluator并且也是默认的鉴别器。该鉴别器可以接受任意布尔表达式作为条件进行求值该表达式可以通过配置文件进行解析并动态编译。如果求值条件返回true则表示该事件符合过滤条件。在配置过程中鉴别器的表达式可以在子标签中进行配置。onMatch:用于配置符合过滤条件的操作onMismatch:用于配置不符合过滤条件的操作
具体用法介绍
EvaluatorFilter是求值过滤器评估、鉴别日志是否符合指定条件。过滤掉所有日志消息中不包含“billing”字符串的日志。
appender nameSTDOUT classch.qos.logback.core.ConsoleAppender
filter classch.qos.logback.core.filter.EvaluatorFilter evaluator !-- 默认为 ch.qos.logback.classic.boolex.JaninoEventEvaluator -- expressionreturn message.contains(billing);/expression /evaluator OnMatchACCEPT /OnMatch OnMismatchDENY/OnMismatch
/filter
encoder pattern %-4relative [%thread] %-5level %logger - %msg%n /pattern
/encoder
/appender ThresholdFilter
临界值过滤器ThresholdFilter用于过滤掉低于指定临界值的日志。如果日志级别等于或高于临界值则过滤器返回NEUTRAL。反之如果日志级别低于临界值则该日志会被拒绝。
需要注意的是ThresholdFilter会过滤低于指定阈值的事件。对于等于或高于阈值的事件ThresholdFilter将在调用decision()方法时响应NEUTRAL但是将拒绝级别低于阈值的事件。
具体用法介绍
过滤掉所有低于INFO级别的日志。
appender nameCONSOLE classch.qos.logback.core.ConsoleAppender
!-- 过滤掉 TRACE 和 DEBUG 级别的日志--
filter classch.qos.logback.classic.filter.ThresholdFilter levelINFO/level
/filter
encoder pattern %-4relative [%thread] %-5level %logger{30} - %msg%n /pattern
/encoder
/appender本文总结
Logback是一种Java日志框架可以提供高度可配置的日志记录功能包括级别控制和事件过滤等功能。它基于SLF4JSimple Logging Facade for Java日志抽象层可以与多种流行的Java日志框架兼容如Log4j和Java Util Logging。Logback的核心组件包括Logger、Appender和Layout它们可以协同工作以产生可定制和易于理解的日志输出。Logback支持多种输出形式例如控制台输出、文件输出等。它还支持异步日志记录和事件过滤器可以高效地记录大量日志数据并快速定位和解决问题。Logback还支持动态配置和可插拔式的架构设计使得它非常易于使用和扩展。作为一种广泛应用于Java应用程序的日志框架Logback的功能介绍非常重要。