在java代码中获取Logback模式

use*_*180 4 java logging logback

我通过 MDC 插入一些变量,但如果此变量未在 logback 模式中使用,我想记录一个警告。有谁知道如何在java代码中检索logback模式?某事。像这样:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
...

...
Logger LOG = LoggerFactory.getLogger(MyTestClass.class);
...

MDC.put("id","thisIsATestId");
String pattern = LOG.getLogbackPattern();
checkPatternAndWarnIfMissingVar(pattern,"id");
...
Run Code Online (Sandbox Code Playgroud)

Hen*_*sen 5

这有点难看,这可能表明我们不打算这样做,但它似乎有效:

// Get some internal contexts
ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)
        LoggerFactory.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);

// Get the current pattern in the appender.
OutputStreamAppender<ILoggingEvent> consoleapp = 
    (OutputStreamAppender<ILoggingEvent>) logger.getAppender("console");

// Now check the pattern
PatternLayoutEncoder encoder = (PatternLayoutEncoder) consoleapp.getEncoder();
String pattern = encoder.getPattern();
checkPatternAndWarnIfMissingVar(pattern,"id");
Run Code Online (Sandbox Code Playgroud)

请注意,这假设有一个名为“console”的附加程序。附加程序列表取决于您的配置,可以使用以下方式检索:

Iterator<Appender<ILoggingEvent>> it = logger.iteratorForAppenders();
while (it.hasNext()) {
    Appender<ILoggingEvent> app = it.next();
    System.out.println( app.getName() );
}
Run Code Online (Sandbox Code Playgroud)