我有一个扩展LayoutBase的类。在doLayout方法中,我为我的日志记录添加了一个名为MSG的密钥,并将值设置为ILoggingEvent event.getMessage()。
我看到我的日志记录中添加了值,但它们并不一致;一些日志消息和一些异常堆栈跟踪。
任何人都可以告诉我ILoggingEvent event.getMessage()从哪里获取其值?
答案 0 :(得分:2)
它提到每个log
都会经历一系列步骤
获取过滤器链决定
如果存在,则调用TurboFilter
链。 Turbo过滤器可以设置上下文范围的阈值,或根据Marker
,Level
,Logger
,message
或{{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
当然,也可以在过滤后添加您的布局。