首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Logback Spring Rollbar附加器中按消息过滤事件

在Logback Spring Rollbar附加器中按消息过滤事件
EN

Stack Overflow用户
提问于 2020-05-04 20:52:00
回答 1查看 76关注 0票数 1

我已经配置了我的Rollbar Appender in logback-spring.xml

代码语言:javascript
复制
<appender name="Rollbar" class="com.rollbar.logback.RollbarAppender">
    <accessToken>${ROLLBAR_TOKEN}</accessToken>
    <environment>${SPRING_PROFILES_ACTIVE}</environment>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>ERROR</level>
    </filter>
</appender>

并将其激活为所需的配置文件:

代码语言:javascript
复制
<!-- debug level for dev -->
<springProfile name="dev">
    <root level="debug">
        <appender-ref ref="Console"/>
        <appender-ref ref="Rollbar"/>
    </root>
</springProfile>

一切正常,我可以收到滚动条中的错误,除了一个问题。有一些错误是我不想在Rollbar中看到的,但我仍然可以在控制台中看到它们,例如:

代码语言:javascript
复制
io.netty.channel.unix.Errors$NativeIoException: readAddress(..) failed: Connection reset by peer

如何以最方便的方式过滤这类消息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-26 20:16:40

解决方案是创建您自己ch.qos.logback.core.filter.Filter实现

代码语言:javascript
复制
public class RegexRollbarFilter extends Filter<ILoggingEvent> {

    private String regex;
    private boolean includeThrowableMessage = true;

    @Override
    public FilterReply decide(ILoggingEvent event) {
        if (!isStarted()) {
            return FilterReply.NEUTRAL;
        }

        IThrowableProxy throwableProxy = event.getThrowableProxy();
        if (event.getMessage()
                 .matches(regex) || includeThrowableMessage && throwableProxy != null && throwableProxy.getMessage()
                                                                                                       .matches(regex)) {
            return FilterReply.DENY;
        } else {
            return FilterReply.NEUTRAL;
        }
    }

    public void setRegex(String regex) {
        this.regex = regex;
    }

    public void setIncludeThrowableMessage(boolean includeThrowableMessage) {
        this.includeThrowableMessage = includeThrowableMessage;
    }

    public void start() {
        if (this.regex != null) {
            super.start();
        }
    }
}

并以如下方式使用它:

代码语言:javascript
复制
 <appender name="Rollbar" class="com.rollbar.logback.RollbarAppender">
        <accessToken>${ROLLBAR_TOKEN}</accessToken>
        <environment>${SPRING_PROFILES_ACTIVE}</environment>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <filter class="your.package.RegexRollbarFilter">
            <regex>^.*An existing connection was forcibly closed by the remote host.*$</regex>
        </filter>
        <filter class="your.package.RegexRollbarFilter">
            <regex>(.|\n)*readAddress\(..\) failed: Connection reset by peer(.|\n)*$</regex>
        </filter>
    </appender>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61592634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档