“后浪”日志框架logback的使用和配置文件详解( 二 )


  • 有效级别及级别的继承
Logger 可以被分配级别 。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于
ch.qos.logback.classic.Level类 。如果 logger没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别 。root logger 默认级别是 DEBUG 。
  • 打印方法与基本的选择规则
打印方法决定记录请求的级别 。例如,如果 L 是一个 logger 实例,那么,语句 L.info("..")是一条级别为 INFO的记录语句 。记录请求的级别在高于或等于其 logger 的有效级别时被称为被启用,否则,称为被禁用 。记录请求级别为 p,其 logger的有效级别为 q,只有则当 p>=q时,该请求才会被执行 。该规则是 logback 的核心 。级别排序为: TRACE < DEBUG < INFO < WARN < ERROR四、logback的默认配置
如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小化配置 。最小化配置由一个关联到根 logger 的ConsoleAppender 组成 。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的 PatternLayoutEncoder 进行格式化 。root logger 默认级别是 DEBUG 。
  • Logback的配置文件
Logback 配置文件的语法非常灵活 。正因为灵活,所以无法用 DTD 或 XML schema 进行定义 。尽管如此,可以这样描述配置文件的基本结构:以<configuration>开头,后面有零个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<root>元素 。
  • Logback默认配置的步骤
  1. 尝试在 classpath下查找文件logback-test.xml;
  2. 如果文件不存在,则查找文件logback.xml;
  3. 如果两个文件都不存在,logback用BasicConfigurator自动对自己进行配置,这会导致记录输出到控制台 。
五、logback.xml常用配置详解
 
“后浪”日志框架logback的使用和配置文件详解

文章插图
 
  • (1) 根节点<configuration>,包含下面三个属性:
scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true 。
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒 。当scan为true时,此属性生效 。默认的时间间隔为1分钟 。
debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态 。默认值为false 。例如:
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!--其他配置省略--> </configuration> 
  • (2) 子节点<contextName>:用来设置上下文名称,每个logger都关联到logger上下文,默认上下文名称为default 。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录 。一旦设置,不能修改 。
例如:
<configuration scan="true" scanPeriod="60 seconds" debug="false"><contextName>myAppName</contextName><!--其他配置省略--></configuration>
  • (3) 子节点<property> :用来定义变量值,它有两个属性name和value,通过<property>定义的值会被插入到logger上下文中,可以使“${}”来使用变量 。
name: 变量的名称;
value: 的值时变量定义的值
例如:
<configuration scan="true" scanPeriod="60 seconds" debug="false"><property name="APP_Name" value=https://www.isolves.com/it/cxkf/kj/2020-06-08/"myAppName" />${APP_Name}
  • (4) 子节点<timestamp>:获取时间戳字符串,它有两个属性key和datePattern
key: 标识此<timestamp> 的名字;
datePattern: 设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循JAVA.txt.SimpleDateFormat的格式 。例如:
<configuration scan="true" scanPeriod="60 seconds" debug="false"><timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/><contextName>${bySecond}</contextName><!-- 其他配置省略--> </configuration>
  • (5) 子节点<appender>:负责写日志的组件,它有两个必要属性name和class 。
  • name指定appender名称,
  • class指定appender的全限定名
5.1、ConsoleAppender 把日志输出到控制台,有以下子节点:
<encoder>:对日志进行格式化 。(具体参数稍后讲解 )
<target>:字符串System.out(默认)或者System.err(区别不多说了)


推荐阅读