我怎样才能在每个线程的基础上动态地使用slf4j / logback更改日志级别

时间:2013-05-09 19:34:28

标签: java slf4j logback

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

应用程序大量使用hibernate,目前我们需要打开hibernate SQL日志。

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

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

我已经阅读了有关MDC的内容,但似乎只能用于在每个线程的基础上添加其他“标签”,但不能更改特定记录器的实际日志记录级别。

这可行吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

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