LogBack消息ILoggingEvent

时间:2017-05-14 14:46:23

标签: java logback

我有一个扩展LayoutBase的类。在doLayout方法中,我为我的日志记录添加了一个名为MSG的密钥,并将值设置为ILoggingEvent event.getMessage()。

我看到我的日志记录中添加了值,但它们并不一致;一些日志消息和一些异常堆栈跟踪。

任何人都可以告诉我ILoggingEvent event.getMessage()从哪里获取其值?

1 个答案:

答案 0 :(得分:2)

请参阅Logback architecture

它提到每个log都会经历一系列步骤

获取过滤器链决定
如果存在,则调用TurboFilter链。 Turbo过滤器可以设置上下文范围的阈值,或根据MarkerLevelLoggermessage或{{1}等信息过滤掉某些事件与每个日志记录请求相关联的。

应用选择规则
在此步骤中,logback 会将记录器的有效级别与请求级别进行比较。如果根据此测试禁用了日志记录请求,则logback将丢弃请求而不进行进一步处理。

创建LoggingEvent对象
如果请求在先前的过滤器中存活,则logback将创建一个包含请求的所有相关参数的Throwable对象

调用appenders
创建LoggingEvent对象后,logback将调用所有适用的 appenders LoggingEvent方法,即从记录器上下文继承的appender。

格式化输出 调用的appender负责格式化日志记录事件。但是,某些(但不是全部)appenders doAppend()是布局的日志记录事件。

发送LoggingEvent
记录事件完全格式化后,每个appender都为delegate the task of formatting

  

我看到我的日志记录中添加了值,但它们并不一致;一些日志消息和一些异常堆栈跟踪。

现在,来到您的查询,您似乎在sent to its destination期间收到了包含异常信息(Throwable)的事件。

您可以创建formatting step来过滤掉此类事件。您所要做的就是扩展CustomFilter

Filter<ILoggingEvent>

这可以更加强大,可以过滤特定类型的异常。你可以把它作为你的作业:P

然后,您可以将此自定义过滤器添加到public class DenyExceptionFilter extends Filter<ILoggingEvent> { @Override public FilterReply decide(ILoggingEvent iLoggingEvent) { final IThrowableProxy throwableProxy = iLoggingEvent.getThrowableProxy(); if (throwableProxy != null && throwableProxy instanceof ThrowableProxy) return FilterReply.DENY; return FilterReply.ACCEPT; } }

appender

当然,也可以在过滤后添加您的布局。