需要执行 RequestBasedLogging

Need to perform RequestBasedLogging

我需要实现基于请求的日志记录。 基于 header - log-level-header.

在我的代码中,我使用 JAX-RS 并实现了 ContainerRequestFilter。

@Override
public void filter(final ContainerRequestContext context) throws IOException {

    String log_level = context.getHeaderString("log-level-header");
    //translate to actual log level
    Logger root = (Logger)LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
    root.setLevel(logLevelToSet);
}

我正在使用 Logback 和 slf4j API。 问题是我将日志级别设置为单例的 RootLogger,因此最终会跨应用程序修改日志级别。

相反,我打算更改特定线程 (RequestBasedLogging) 的日志级别。是否可以实现?如何实现?

是的,这可以通过 TurboFilters and MDC. The code in MDCFilter 实现,应该也有帮助。

关键是要了解MDC。