gpt4 book ai didi

java - Logback SMTPAppender 仅发送最后一封电子邮件

转载 作者:行者123 更新时间:2023-12-01 13:17:07 26 4
gpt4 key购买 nike

我正在尝试将 LogbackSMTPAppender 结合使用作为我的日志记录解决方案。我在 appender 上附加了一个评估器,每记录 100 个错误就会触发发送一封电子邮件。在大多数情况下,这可以正常工作,但我注意到,如果我在循环中快速创建错误以触发多封电子邮件,则只会发送最后一封电子邮件,其中包含正确的内容。这似乎是一个竞争条件,其中第一封电子邮件尚未完成创建/发送,第二封电子邮件在创建时覆盖了第一封电子邮件。有其他人经历过这个或找到解决方案吗?我的 logback 配置附在下面。

<configuration>
<appender name="emailAppender" class="${logback.emailAppenderClass}">
<evaluator class="com.wdp.common.logging.logback.evaluators.CountingLoggerEvaulator">
<limit>100</limit>
</evaluator>
<to>${logback.emailNotificationRecipientStr}</to>
<from>${logback.emailNotificationFromStr}</from>
<smtpHost>${logback.smtpHost}</smtpHost>
<subject>Logback logs for facebook-ads-processes</subject>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d [Thread:%t] %p [%c] - %m%n</pattern>
</layout>

<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
<bufferSize>${logback.cyclicBufferSize}</bufferSize>
</cyclicBufferTracker>
</appender>
</configuration>

这是评估者:

public class CountingLoggerEvaulator extends EventEvaluatorBase<ILoggingEvent> implements EventEvaluator<ILoggingEvent> {
//if limit is not set in configuration, this will cause it to send one email for each message received.
private int limit = 100;
private int counter = 0;

public void setLimit(int limit) {
this.limit = limit;
}

public int getLimit() {
return limit;
}

@Override
public boolean evaluate(ILoggingEvent expr) throws NullPointerException, EvaluationException {
counter++;
if (counter == limit) {
counter = 0;
return true;
} else {
return false;
}
}
}

非常感谢任何帮助。

最佳答案

问题是 SMTPAppender 的 asynchronousSending 属性默认为 true。我将其设置为 false 并且可以正常工作

关于java - Logback SMTPAppender 仅发送最后一封电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22383166/

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