我有一个使用slf4j和log4j在tomcat6 servlet容器内运行的应用程序,尽管切换到logback即将来临。
应用程序大量使用hibernate,目前我们需要打开hibernate SQL日志。
然而,有一个代码路径使TONS重复(和无聊)调用进入休眠状态并产生大量的日志记录。
我希望能够更改特定记录器的日志级别,但只有当前正在执行的线程才会发生这种情况。
我已经阅读了有关MDC的内容,但似乎只能用于在每个线程的基础上添加其他“标签”,但不能更改特定记录器的实际日志记录级别。
这可行吗?
答案 0 :(得分:3)
也许你可以实现filter忽略来自该特定线程的事件。正如您所说,您可能可以使用MDC识别源线程。
答案 1 :(得分:1)
您可以创建基于类名和线程名的slf4j记录器:
logger = LoggerFactory.getLogger(getClass().getName() + "." + Thread.currentThread().getName());
然后对不同的线程使用不同的logback配置。 您还可以在ThreadLocal变量中缓存记录器实例,以最大限度地降低性能影响。