我正在使用 Vaadin 框架,它对拦截事件的支持很差,我不知道会话或 UI 何时被激活,所以我不能将它们的 id 放在 MDC 中。
通常我会:
public void onSessionBegin(){
MDC.put("session", VaadinSession.getCurrent().toString()); //<-- String is immutable
}
public void onSessionEnd(){
MDC.remove("session");
}
但我没有这样的活动,所以我想:
// in the servlet init or wherever
MDC.put("session", new Object(){
public String toString() {
VaadinSession.getCurrent().toString()
};
}); //<-- This is mutable and will be evaluated each time
这样,无论会话更改多少次,我都会在日志中获取当前会话。
这可能吗?如何用自定义实现替换 logback MDC 实现?我应该编辑 slf4j 和 logback 的来源吗?