我正在使用Vaadin框架,它对拦截事件的支持很差,我无法知道何时会话或UI被激活,因此无法将它们的ID放入MDC中。通常我会:
但是我没有这样的事件,所以我想要:
无论会话更改多少次,我都能在日志中得到当前的会话。
这是可能的吗?我该如何用自定义实现替换logback MDC?我应该编辑slf4j和logback的源码吗?
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的源码吗?