Scala 向Sentry Logback添加一个钩子以清除数据

Scala 向Sentry Logback添加一个钩子以清除数据,scala,logback,sentry,Scala,Logback,Sentry,我正在使用LogbackSDK for Java向Sentry发送事件,如中所述 片段: <conversionRule conversionWord="CUSTOM_CONVERSION_RULE" converterClass="clazz..." /> ... <property scope="context" name="myEnc" value="

我正在使用LogbackSDK for Java向Sentry发送事件,如中所述

片段:

<conversionRule conversionWord="CUSTOM_CONVERSION_RULE"
                converterClass="clazz..." />
...
<property scope="context" name="myEnc" value="%d{ISO8601,UTC} | %-5level | %-50thread | %-55logger{55} | %CUSTOM_CONVERSION_RULE" />
...
<appender name="SENTRY" class="io.sentry.logback.SentryAppender">
    <dsn>...</dsn>
    <encoder>${myEnc}</encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>ERROR</level>
    </filter>
</appender>
....
从我所看到的,发送前的
钩子正是我需要在需要时清理数据的地方,因为我不想把一些信息发送给Sentry

现在,第二个问题是,我不知道如何在这里引用一个方法。在Java配置中,有一个接受事件并可以更改它的双函数。但是我想把这个钩子应用到我所有的日志事件中,这就是为什么只在LogbackSDK中配置它的原因。 例如,在SpringBoot中,有一个用于Sentry的启动器,当然还有一个bean,您可以在自动配置中注入该bean。 但是,我使用的Scala没有弹簧靴

此外,该项目已经在prod中,所以我不能改变很多东西,我正在寻找最小的一个,它将允许我添加一个钩子到Logback的sdkforsentry

下面是一个示例,它看起来(我不确定它是如何工作的)可以从XML填充
选项
,然后传递到
init
,这将考虑所有选项,包括我的before send钩子

我不知道是否接受有两个问题,标题中只提到一个问题,但我没有找到更好的方式来问/解释这个问题,因为一件事导致另一件事

总结问题:

  • 为什么自定义规则不适用于Logback Sentry的appender
  • 我怎样才能让appender知道我的钩子并使用它

  • 提前谢谢

    您可以在
    logback.xml
    中独立于appender配置来配置Sentry。例如:

    public class Main {
        private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);
    
        static {
            Sentry.init(options -> {
                options.setDsn("PUT YOUR DSN HERE");
                options.setBeforeSend((sentryEvent, o) -> {
                    sentryEvent.setTag("custom", "tag");
                    return sentryEvent;
                });
            });
        }
        public static void main(String[] args) {
            LOGGER.error("oops");
        }
    }
    
    
    

    最好的方法是通过appender禁用auto init,并通过代码调用Sentry.init。在那里,您可以通过编程编写回调函数。
    public class Main {
        private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);
    
        static {
            Sentry.init(options -> {
                options.setDsn("PUT YOUR DSN HERE");
                options.setBeforeSend((sentryEvent, o) -> {
                    sentryEvent.setTag("custom", "tag");
                    return sentryEvent;
                });
            });
        }
        public static void main(String[] args) {
            LOGGER.error("oops");
        }
    }
    
    <configuration>
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
        <appender name="sentry" class="io.sentry.logback.SentryAppender" />
        <root level="debug">
            <appender-ref ref="console"/>
            <appender-ref ref="sentry"/>
        </root>
    </configuration>