gpt4 book ai didi

spring - 定制SLF4J记录仪

转载 作者:行者123 更新时间:2023-12-02 04:08:28 26 4
gpt4 key购买 nike

我正在尝试找到一种好方法来向我的日志添加前缀,而无需在每次调用时传递它,也无需再次实例化 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在布局中将日志条目的标记放入日志中。

MDC

另一个选项是使用“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com