作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试找到一种好方法来向我的日志添加前缀,而无需在每次调用时传递它,也无需再次实例化 Logger。
目的是单独跟踪 Rest 调用。(每次调用时都会使用 UUID 重新生成前缀)
这就像
@RestController
class MyClass {
//Here the prefix is initialise once
//default value is X
Logger LOG = LoggerFactory.getLogger(MyClass.class);
@RequestMapping("/a")
void methodA() {
LOG.debug("foo");
}
@RequestMapping("/b")
void methodB() {
LOG.setPrefix("B");
LOG.debug("bar");
}
使用此输出
[...] [prefix X] foo
[...] [prefix B] bar
最佳答案
正如您所说,您正在使用 Logback,这里有几个选项可以完成您想要做的事情:
每个日志条目都可以有一个为其建立的“标记”。 (我见过的最好的文档是 SLF4J FAQ 。)类似:
class MyClass {
Marker methodBMarker = MarkerFactory.getMarker("B");
Logger logger = LoggerFactory.getLogger(MyClass.class);
…
void methodB() {
logger.debug(methodBMarker, "bar");
}
}
您需要更新每个方法中的所有日志条目才能使用适当的标记。然后你可以输入 %marker
在布局中将日志条目的标记放入日志中。
另一个选项是使用“Mapped Diagnostic Context ”功能来指定每个日志条目的当前“上下文”。
class MyClass {
Logger logger = LoggerFactory.getLogger(MyClass.class);
…
void methodB() {
MDC.put("method", "b");
try {
…
logger.debug("bar");
…
} finally {
MDC.clear();
}
}
}
然后您将使用 %mdc{method}
在您的布局中输出特定的 MDC 值。请注意,MDC 实际上是用于每个线程的值,例如特定于 Web 连接的值,因此当您离开想要记录值的上下文时,确保清除您不想要的值非常重要英寸。
关于spring - 定制SLF4J记录仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38159124/
我是一名优秀的程序员,十分优秀!