Мне нужно настроить местоположение журнала динамически , поэтому я создал SiftingAppender в logback.xml
<appender name="roleSiftingAppender" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>userRole</key>
<defaultValue>ANONYMOUS</defaultValue>
</discriminator>
<sift>
<appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
<file>${userRole}.log</file>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</encoder>
</appender>
</sift>
</appender>
и теперь мне нужно динамически изменить userRoleпоэтому изменения будут выбраны.
MDC.put("userRole","priyamal");
, но изменения не будут выбраны в приложении весенней загрузки, но если мы изменим файл журнала программно, будут добавлены новые изменения, вот как я делаю это программно
static void programmaticConfiguration() {
// Configure logback
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
PatternLayoutEncoder layout = new PatternLayoutEncoder();
layout.setContext(loggerContext);
layout.setPattern("%X{first} %X{last} - %m%n");
layout.start();
ConsoleAppender<ILoggingEvent> appender = new ConsoleAppender<ILoggingEvent>();
appender.setContext(loggerContext);
appender.setEncoder(layout);
appender.start();
// cast root logger to c.q.logback.classic.Logger so that we can attach
// an appender to it
ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("root");
root.addAppender(appender);
}
Я включил <configuration scan="true">
в файле logback.xml, и я даже попытался вызвать эту функцию, которая настроит XML-файл согласно документации https://logback.qos.ch/xref/chapters/mdc/SimpleMDC.html
static void XMlConfig(){
try {
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(loggerContext);
loggerContext.reset();
configurator.doConfigure(ResourceUtils.getFile("classpath:logback.xml"));
} catch (JoranException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
, но ничего не помоглоя что-то пропустил ?любая помощь будет оценена.