我正在使用MDC和密钥"requestId"
来跟踪传入的请求。我现在想使用SMTPAppender
向我发送一封邮件,其中包含给定请求的整个日志,如果有任何行处于错误级别。
我知道我可以使用MDC鉴别器在请求ID之后对日志行进行分组。问题是SMTPAppender
在第一个错误时通过电子邮件发送请求的日志。我希望也包含该请求的后续日志行。
我不介意在每个请求后放置一个标记(但我更喜欢将它放在TRACE级别)。即在每次请求之后,我都不介意做
logger.trace(MarkerFactory.getMarker("END_OF_REQUEST"), "End of request");
“刷新”电子邮件。
(我已经尝试创建自己的评估器,但是我不能让它与鉴别器一起发挥得很好。)
答案 0 :(得分:0)
我想我设法按如下方式解决了这个问题:
public class MyEvaluator extends ContextAwareBase
implements EventEvaluator<ILoggingEvent> {
private String name;
private boolean started;
private Set<String> requestIdsWithErrors = new HashSet<>();
public boolean evaluate(ILoggingEvent event) {
String requestId = MDC.get("requestId");
boolean result = false;
if (event.getLevel().levelInt >= Level.ERROR_INT)
requestIdsWithErrors.add(requestId);
Marker marker = event.getMarker();
if (marker != null && marker.getName().equals("END_OF_REQUEST"))
result = requestIdsWithErrors.remove(requestId);
return result;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public boolean isStarted() { return started; }
public void start() { started = true; }
public void stop() { started = false; }
}
我希望我可以利用SMTPAppender
的判别器机制(并将requestIdsWithErrors
集替换为boolean
)。如果有人知道如何做到这一点,我会感激,如果有人发布了答案......