Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用slf4j/logback在每个线程的基础上动态更改日志级别_Java_Slf4j_Logback - Fatal编程技术网

Java 如何使用slf4j/logback在每个线程的基础上动态更改日志级别

Java 如何使用slf4j/logback在每个线程的基础上动态更改日志级别,java,slf4j,logback,Java,Slf4j,Logback,我有一个应用程序在Tomcat6Servlet容器中运行,使用slf4j和log4j,尽管切换到logback是迫在眉睫的 应用程序大量使用hibernate,目前我们需要打开HibernateSQL日志 然而,有一条代码路径会使大量重复(和枯燥)调用进入hibernate,并产生大量日志记录 我希望能够更改特定记录器的日志级别,但这仅适用于当前正在执行的线程 我读过有关MDC的文章,但它似乎只能用于在每个线程的基础上添加额外的“标签”,而不能更改特定记录器的实际日志记录级别 这可行吗?也许您可

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

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

然而,有一条代码路径会使大量重复(和枯燥)调用进入hibernate,并产生大量日志记录

我希望能够更改特定记录器的日志级别,但这仅适用于当前正在执行的线程

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


这可行吗?

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

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

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

logger = LoggerFactory.getLogger(getClass().getName() + "." + Thread.currentThread().getName());
然后对不同的线程使用不同的logback配置。
您还可以将记录器实例缓存在ThreadLocal变量中,以最小化性能影响。

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

logger = LoggerFactory.getLogger(getClass().getName() + "." + Thread.currentThread().getName());
然后对不同的线程使用不同的logback配置。
您还可以将记录器实例缓存在ThreadLocal变量中以最小化性能影响。

这适用于我的代码,但不适用于hibernate这样的代码,它已经创建了记录器实例,但它已经创建了。这适用于我的代码,但不适用于hibernate这样的代码,它已经创建了记录器实例。