logback--进阶--03--日志打印步骤

logback–进阶–03–日志打印步骤


代码位置
https://gitee.com/DanShenGuiZu/learnDemo/tree/master/logback-learn

1、步骤

当用户调用 logger 的日志打印方法时,logback 框架所采取的步骤是怎么样的呢?

现在我们分析当用户调用名为 “com.nobody.UserService” 的 logger 的 info() 方法时,logback 采取的步骤

步骤1、获得过滤器链决策

  1. 如果过滤器存在,那么 TurboFilter 链会被调用。
  2. TurboFilter可以设置一个上下文范围阈值,或过滤掉某些日志
    1. 如果过滤器链的答复是 FilterReply.DENY,那么日志记录请求会被抛弃。
    2. 如果过滤器链的答复是 FilterReply.NEUTRAL,走步骤2。
    3. 如果过滤器链的答复是 FilterReply.ACCEPT,则跳过步骤2,直接跳至步骤3。

步骤2、logger 级别比较规则

在此步骤中,logback 将 logger 的有效级别与打印请求级别进行比较。
1. 如果根据级别规则禁用了日志记录请求,丢弃该请求
2. 如果请求打印日志的级别 小于 logger 设定的级别,丢弃该请求
3. 如果请求打印日志的级别 大于等于 logger 设定的级别,走步骤3。

步骤3、创建一个 LoggingEvent 对象

  1. 如果请求在先前的过滤器中存活下来了,则 logback 将创建一个 ch.qos.logback.classic.LoggingEvent 对象
  2. LoggingEvent 对象 包含请求的所有相关参数,例如
    1. 请求的 logger
    2. 请求级别
    3. 日志消息
    4. 可能与请求一起传递的异常
    5. 当前时间
    6. 当前线程
    7. 跟发出日志记录请求相关的类的各种数据以及MDC

步骤4、调用 appenders

创建 LoggingEvent 对象后,logback 将调用所有能用的 appenders 的 doAppend() 方法。

步骤5、格式化输出

  1. 被调用的 appender 负责格式化日志记录事件。但是,一些但不是全部 appender 将格式化日志记录事件的任务委托给 layout。

  2. layout 会格式化 LoggingEvent 实例,并以字符串形式返回结果。

    1. 注意:某些 appender,例如 SocketAppender 不会将日志记录事件转换为字符串,而是将其序列化。因此,它们没有 layout,也不需要 layout。

步骤6、发出 LoggingEvent

日志记录事件被完全格式化后,每个 appender 会将其发送到其目的地

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值