gpt4 book ai didi

java - 日志返回消息 ILoggingEvent

转载 作者:行者123 更新时间:2023-12-02 02:50:15 33 4
gpt4 key购买 nike

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

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

谁能告诉我 ILoggingEvent event.getMessage() 从哪里获取它的值?

最佳答案

请引用Logback architecture

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

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

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

创建 LoggingEvent 对象
如果请求在之前的过滤器中幸存下来,logback 将创建一个 LoggingEvent包含请求的所有相关参数的对象

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

格式化输出被调用的附加程序负责格式化日志记录事件。然而,一些(但不是全部)appender delegate the task of formatting将日志事件记录到布局。

发送 LoggingEvent
日志记录事件完全格式化后,它是 sent to its destination由每个附加程序。

I'm seeing values added to my logging but they're not consistent; some logging messages and some exception stack traces.

现在,对于您的查询,您似乎正在接收在 Throwable 期间包含异常信息 ( formatting step ) 的事件。 .

您可以创建 CustomFilter过滤掉此类事件。您所要做的就是扩展 Filter<ILoggingEvent>

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;
}
}

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

然后您可以将此自定义过滤器添加到您的 appender

<appender name="APPENDER_NAME" class="ch.qos.logback.classic.AsyncAppender">
<filter class="com.stackoverflow.DenyExceptionFilter" />
</appender>

当然,在过滤器之后添加您的布局。

关于java - 日志返回消息 ILoggingEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43965222/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com