当前位置: 首页 > news >正文

logback配置文件-入门

基本概念

Logger

日志记录器。

  1. 命名层级关系

Logger命名区别大小写,层级关系之间用"."表示,如"cn.com"是"cn.com.aqiu"父Logger。
所有Logger可以通过 **LoggerFactory#getLogger(String name)**来获取,且相同名称返回的实例相同。

  1. 根Logger

是所有层级结构的顶部Logger,可以通过LoggerFactory#getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)获取

  1. Level继承关系

Logger可以被分配级别(TRACE,DEBUG,INFO, WARN,ERROR)。当Logger没有分配Level时,从最近祖先继承

Logger nameAssigned levelEffective level
rootDEBUGDEBUG
XINFOINFO
X.YnoneINFO
X.Y.ZERRORERROR
  1. Level与log规则

等级排序(严重程度,而非优先级):TRACE < DEBUG < INFO < WARN < ERROR

Logger logger = LoggerFactory.getLogger("com.foo");
logger.setLevel(Level. INFO);// 启用,因为 WARN >= INFO
logger.warn("Low fuel level.");
// 禁用, 因为 DEBUG < INFO. 
logger.debug("Starting search for nearest gas station.");

Appender

Logback 通过Appender#doAppend(E event)将日志事件打印到目的地(允许附加多个Appender即即多个目的地
目前官方已提供 console、文件、远程socket服务、JMS、远程UNIX Syslog进程、MySQL/PostgreSQL/Orcale等数据库的 appender 支持.
一个Logger可以附加多个Appender。
同时Appender也有继承关系,通过Logger的additivity标志影响,为true时表示为Logger附加的所有Appender会被继承。同时additivity标志也是可继承的。

Logger NameAttached AppendersAdditivity FlagOutput Targets
rootA1not applicableA1
xA-x1, A-x2trueA1, A-x1, A-x2
x.ynonetrueA1, A-x1, A-x2
x.y.zA-xyz1trueA1, A-x1, A-x2, A-xyz1
securityA-secfalseA-sec
security.accessnonetrueA-sec

Layout

表示日志输出格式,其通过接口ch.qos.logback.core#doLayout(E event): String将日志事件格式化为String 返回。
Logback 官方提供 PatternLayout,允许以类似c语言printf来指定输出格式。
可通过将 layout 与 appender 关联,来实现自定义输出格式和目的地;但并不是每个 appender 都需要 layout,比如负责序列化的 SocketAppender 自然不需要 doLayout 转字符串

Encoder

通过Encoder#encode可将 LoggingEvent 转为 byte[]。
之前 Logback 仅提供了 PatternLayoutEncoder 这一个可用的实现,其逻辑很简单:内部构造/包装了 PatternLayout 实例,调用PatternLayout#doLayout得到格式化字串后,再调用String#getBytes返回 byte[]
引入原因:因为Layout#doLayout接口只能将 LoggingEvent 转为 String,这在某些情况下不太灵活,而现在 Encoder 能完全控制字节格式。
比如,在以前的版本中常在FileAppender中嵌套PatternLayout来使用,但现在仅需依赖Encoder。

配置文件

当没有设置配置文件时,Logback使用BasicConfiguration配置自己,等效以下xml配置文件

<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender><root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>

<configuration>

属性:

  1. debug:获取Logback内部状态。推荐使用该属性,而不是在代码中调用StatusPrinter。使用示例:<configuration debug="true">
  2. scan/scanPeriod:可定期扫描配置文件的更改,并在更改时自动应用,默认每分钟一次。使用示例:<configuration scan="true" scanPeriod="30 seconds" >
  3. packagingData:可令每一行StackTrace输出其对应jar包。需注意,其计算成本高昂。使用示例:<configuration packagingData="true">

<logger>

通过该标签对logger进行配置。
属性:name(必须),level(可选),additivity(可选-true,false)
子标签:(0或多个)通过该标签把appender附加到logger上。

<root>

通过该标签配置root logger,可以说是一个特殊的标签。
属性:level(可选)
子标签:(0或多个)通过该标签把appender附加到logger上。

<appender>

配置appender
属性:name(必须)、class(必须)指定类的全限定名用于实例化。
子标签:(0或1个)、(0或多个)、(0或多个)
:有class属性指定一个类的全限定名(默认使用PatternLayout),用于实例化。
:有class属性指定一个类的全限定名(默认使用PatternLayoutEncoder),用于实例化。

<contextName>

每个logger都附加到某个logger context上去,该标签默认为default。
当多个应用输出到同一个目的地时,设置logger context的名称便于区分

<property>

通过该标签定义变量。

  1. 通过name和value定义一个变量<property name="USER_NAME" value="/data/logs" />
  2. 通过引入外部文件定义多个变量<property file="F:\project\logback-examples\src\main\resources\variables1.properties"/>
  3. 通过加载classpath下的文件定义多个变量<property resource="resource1.properties" />

通过":-"在获取变量时指定默认值,当变量找不到时很有用,如:“${aNme:-golden}”
变量作用域:
本地(local scope):本地范围内的属性存在配置文件的加载过程中。配置文件每加载一次,变量就会被重新定义一次。
上下文(context scope):上下文范围内的属性会一直存在上下文被清除。
系统(system scope):系统范围内的属性,会插入到 JVM 的系统属性中,跟随 JVM 一同消亡。
在进行变量替换的时候,会先从本地范围去找,再从上下文去找,再从系统属性中去找,最后会去系统的环境变量中去找。
可以通过 <property><define><insertFromJNDI> 元素的 scope 属性来设置变量的作用范围。scope 属性可能的值为:local,context,system。如果没有指定,则默认为 local。

<include>

引入外部配置文件。
属性:file(可选)通过相对路径或绝对路径引入外部文件、resource(可选)引入classpath路径下的资源、url(可选)引入外部文件、optional(可选)设置为ture时,表示引入的文件是可选的。
示例如下。

<configuration><include file="src/main/resources/includedConfig.xml" /><root level="DEBUG"><appender-ref ref="includedConsole" /></root>
</configuration>
<included><appender name="includedConsole" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d - %m%n</pattern></encoder></appender>
</included>

<filter>

过滤器通过一个有序列表进行管理,并且基于三元逻辑。每个过滤器的 decide(ILoggingEvent event) 被依次调用。这个方法返回 FilterReply 枚举值中的一个, DENY, NEUTRAL 或者 ACCEPT。标签被添加到中使用。
DENY:日志事件会被丢弃掉,并且不会考虑后续的过滤器。
NEUTRAL:会考虑后续的过滤器。如果没有其它的过滤器了,那么日志事件会被正常处理。
ACCEPT:会跳过剩下的过滤器而直接被处理。
LevelFilter过滤器基于level过滤日志事件。如果事件的级别与配置的级别相等,过滤器会根据配置的 onMatchonMismatch 属性,接受或者拒绝事件。如下配置,只会接受INFO日志(其他level都不会接受)

  <filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter>

ThreadholdFilter过滤器基于给定的临界值来过滤事件。如果事件的级别等于或高于给定的临界值(TRACE < DEBUG < INFO < WARN < ERROR),当调用 decide() 时,ThresholdFilter 将会返回 NEUTRAL。但是事件的级别低于临界值将会被拒绝。如下配置,只会接受大于INFO的日志,即WARN和ERROR。

<filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level>
</filter>

http://www.mrgr.cn/news/1372.html

相关文章:

  • 揭秘五大无线领夹麦克风常见智商税:选购时务必多注意!
  • 集师知识付费小程序开发
  • React概念理解
  • Linux:进程替换
  • Linux:CentOS配置
  • LinuX下ETCD安装、配置、命令
  • Redis分布式锁
  • Kubernetes的快速安装
  • 旅游网站
  • 工 厂设计模式
  • 【SAP HANA 39】HANA 中的 IFNULL() 和 COALESCE() 函数的作用
  • 设计模式 适配器模式
  • 鸿蒙HarmonyOS开发:用户通知服务Noification的详细使用指南
  • sed awk 第二版学习(一)—— sed 与 awk 基本操作
  • 贝叶斯推理:分步指南
  • WPF-实现多语言的静态(需重启)与动态切换(不用重启)
  • 设计模式实战:数据分析系统的设计与实现
  • 2024新型数字政府综合解决方案(六)
  • C#中的多线程
  • 【数据结构】二叉树篇