import org.slf4j.MDC;
MDC.put(ID1, id1);
MDC.put(ID2, id2);
MDC.put(ID3, id3);
try {
return joinPoint.proceed();
} finally {
MDC.remove(ID1);
MDC.remove(ID2);
MDC.remove(ID3);
}
MDC.put(ID1, id1);
MDC.put(ID2, id2);
MDC.put(ID3, id3);
try {
return joinPoint.proceed();
} finally {
try{
MDC.remove(ID1);
} finally {
MDC.remove(ID2);
MDC.remove(ID3);
}
}
问题如有不足,请指出。我反映一下再上传吧
我认为您实际上是在询问进行删除的正确方法。
如果我们假设任何
put
或 remove
都可以抛出异常,并且不清理 MDC 是不可接受的,那么正确的写法是:
try {
MDC.put(ID1, id1);
try {
MDC.put(ID2, id2);
try {
MDC.put(ID3, id3);
} finally {
MDC.remove(ID3);
}
} finally {
MDC.remove(ID2);
}
} finally {
MDC.remove(ID1);
}
另一方面,如果我们将 MDC javadocs 视为定义行为,那么只有当键为
remove
时,才会抛出异常。如果你能保证null
、ID1
和ID2
不是ID3
。那么上面的代码就没有必要了。