(学习心得)logback日志配置简述
最近几天在公司看了看logback的官方文档
总结一下 以免忘记
1.级别
TRACE,DEBUG, INFO, WARN and ERROR。TRACE最低级别 ERROR最高级别
2.级别继承的问题
如果没有给定一个级别 那么日志记录器会从最近的一个上级中继承级别 举个例子 用官网的一个图来说
例子1:
root 是最顶级的一个日志记录器 他设定的级别是debug 那么他的有效等级就是debug级别
x是root下一个级别的日志记录器 但是他没有设定有效的级别(Assigned level = none)那么他的有效等级会从上一个级别中继承 那么就是 root的有效级别 debug。
后面的X.Y,X.Y.Z 同样的道理 最后大家的有效等级都是debug级别。
例子2:
这个例子就很好理解了 每个记录器都设定了日志级别 不会有继承的问题 所以设定什么级别 有效等级就是什么级别。
例子3:
root级别 设定了 debug级别 有效等级是debug 没有问题
X 设定了info级别 有效等级 info 没有问题
X.Y 没有设定有效等级 那么就会继承 但是他上面有两个级别 继承哪一个呢? 官网是这么说的
If a given logger is not assigned a level, then it inherits one from its closest ancestor with an assigned level.
选择最近的那个 所以 X.Y 的有效级别是 info 不是debug
X.Y.Z 设置了error级别 所以有效等级是error级别
3.日志的级别过滤问题
不知道大家有么有这样的问题 有一个日志记录器 设定了info级别 那么他会打印出来什么级别的日志?debug级别的日志能打印出来么?warn级别的日志呢?
直接给答案 warn能出来 debug出不来。 我是这么理解的
传过来的日志,比日志记录器级别高 能出来
传过来的日志,比日志记录器的级别低 出不来
上官网的图
可以看出来 如果设置的有效等级是trace 那么所有的日志都会打印。因为他是最低级别的
如果设置的是error 那么只有error会打印 因为他是最大的。
4.日志打印到哪里的问题
一个日志可以打印到多个地方 例如 你的控制台 文件 或者数据库中等。。。
这里要明确一个 单词 appender
官网中对于appender的解释是这样的
Logback allows logging requests to print to multiple destinations. In logback speak, an output destination is called an appender
大致的翻译呢 就是 logback允许日志请求打印到多个地方。在logback中 输出的目的地叫做appender。
那么我们就可以理解成 appender 用于控制日志输出在哪里。但是呢 这里还有一个传递的问题需要解释一下
解释这个问题 我们来模拟一个场景
现在 有 两个appender 分别是 root 和 x 。
root 设置了一个输出目的地 是控制台(A1) ;
x设置了两个输出目的地 文件1(x1)和文件2(x2)
如果现在一个日志请求,用的是root这个appender 那么这个日志会打印在哪里 只有控制台 因为root只配置了一个A1。
那么现在如果这个日志请求,用了x这个appender呢? 他会打印在哪里? 肯定有朋友会说会输出在两个文件 x1,x2 中。恭喜你 错了。他会输出在3个目的地中 x1,x2和A1 也就是说两个文件+控制台。
有的朋友应该会疑惑,为什么会输出到控制台A1 这就是要说的问题, 日志请求的时候 如果使用的appender存在父级,那么这个父级也会输出这个日志。当然,这是能够控制的。
additivity
这个属性就是用来控制是否向上级传递日志 如果设置了false 那么不会向上级传递。默认是true。
上官网的图
这里 要注意的是 security 和 security.access
security 的 Additivity Flag 是false 那么他不会向上级传递 所以他只会输出搭到A-sec。
security.access 没有配置 输出目的地 但是他的 Additivity Flag 是true 向上级传递 所以也会输出到A-sec
未完待续。。。。(禁止转载)