3

我有一个使用 slf4j 和 log4j 在 tomcat6 servlet 容器内运行的应用程序,尽管切换到 logback 迫在眉睫。

该应用程序大量使用了hibernate,暂时我们需要打开hibernate SQL logging。

但是,有一个代码路径可以使大量重复(和无聊)的调用进入休眠状态并产生大量日志记录。

我希望能够更改特定记录器的日志级别,但仅对当前正在执行的线程发生这种情况。

我读过 MDC,但它似乎只能用于在每个线程的基础上添加额外的“标签”,而不是更改特定记录器的实际日志记录级别。

这是可行的吗?

4

2 回答 2

3

也许您可以实现一个过滤器来忽略来自该特定线程的事件。正如您所说,您可能可以使用 MDC 识别源线程。

于 2013-05-09T19:38:52.307 回答
1

您可以创建基于类名和线程名的 slf4j 记录器:

logger = LoggerFactory.getLogger(getClass().getName() + "." + Thread.currentThread().getName());

然后对不同的线程使用不同的 logback 配置。您还可以在 ThreadLocal 变量中缓存记录器实例以最大程度地减少性能影响。

于 2013-05-09T20:47:40.247 回答