Log4J2: изменение конфигурации Appenders программно - PullRequest
0 голосов
/ 11 мая 2018

Я хочу модифицировать конфигурации TraceFileAppender программно, то есть patternLayout и SizeBasedTriggeringPolicy, но каким-то образом мои программные конфигурации не приводят к желаемому изменению макета шаблона и политики.Какое может быть возможное решение.Я перезаписываю одного и того же приложения программно.Ниже приведен код.

XML-файл конфигурации

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{DEFAULT} %-5level [%class{1}:%L] - %msg%n"/> 
        </Console>
        <RollingFile name="TraceFileAppender" fileName="logs/TraceFile.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log">
        <Policies>
                <SizeBasedTriggeringPolicy size="50 MB" />
            </Policies>
            <PatternLayout pattern="%d{DEFAULT} %-5level [%class{1}:%L] - %msg%n"/> 
        </RollingFile>
        <RollingFile name="MonitorFileAppender" fileName="logs/MonitorFile.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log"> 
        <Policies>
                <OnStartupTriggeringPolicy />
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="50 MB" />
        </Policies>
        <PatternLayout pattern="%d{DEFAULT} %-5level [%class{1}:%L] - %msg%n"/>         </RollingFile> 
    </Appenders>
    <Loggers>   
        <Root level="INFO">
            <AppenderRef ref="Console"/>
        </Root>
    <Logger name="TraceFileLogger">
        <AppenderRef ref="TraceFileAppender" />
    </Logger>
    <Logger name="MonitorFileLogger">
        <AppenderRef ref="MonitorFileAppender" />
    </Logger>
    </Loggers>
</Configuration>

Основной класс

public class MainClass {

    public static void main(String[] args) {

        Package1LoggingClass a = new Package1LoggingClass();
        a.performSomeTraceTask();
        a.addAppender();
        a.performSomeTraceTask();   
    }
}

Package1LoggingClass

public class Package1LoggingClass {

    public void performSomeTraceTask(){

        Logger logger = LogManager.getLogger("TraceFileLogger");

        logger.info("User info updated");

        logger.debug("This is a debug Trace message");
        logger.info("This is an info Trace message");
        logger.warn("This is a warn Trace message");
        logger.error("This is an error Trace message");
        logger.fatal("This is a fatal Trace message");

    }

    public void addAppender() {
        LoggerContext ctx = (LoggerContext) LogManager.getContext();
        Configuration config = ctx.getConfiguration();

        PatternLayout layout = PatternLayout.newBuilder()
          .withConfiguration(config)
          .withPattern("%d{HH:mm:ss.SSS} [Zuraiz] %msg%n")
          .build();


        RollingFileAppender appender = RollingFileAppender.newBuilder()
          .setConfiguration(config)
          .withName("TraceFileAppender")
          .withLayout(layout)
          .withFileName("logs/TraceFile.log")
          .withFilePattern("Zuzi")
          .withPolicy(SizeBasedTriggeringPolicy.createPolicy("10KB"))
          .build();

        appender.start();
        config.addAppender(appender);
        updateLoggers(appender,config);
    }
    private void updateLoggers(final Appender appender, final Configuration config) {

        LoggerConfig loggerConfig = config.getLoggerConfig("TraceFileLogger") ;
        loggerConfig.addAppender(appender, null, null);

    }
}

Выход файла журнала

2018-05-11 17:28:51,023 INFO  [Package1LoggingClass:31] - User info updated
2018-05-11 17:28:51,027 INFO  [Package1LoggingClass:34] - This is an info Trace message
2018-05-11 17:28:51,028 WARN  [Package1LoggingClass:35] - This is a warn Trace message
2018-05-11 17:28:51,028 ERROR [Package1LoggingClass:36] - This is an error Trace message
2018-05-11 17:28:51,028 FATAL [Package1LoggingClass:37] - This is a fatal Trace message
2018-05-11 17:28:51,115 INFO  [Package1LoggingClass:31] - User info updated
2018-05-11 17:28:51,115 INFO  [Package1LoggingClass:34] - This is an info Trace message
2018-05-11 17:28:51,115 WARN  [Package1LoggingClass:35] - This is a warn Trace message
2018-05-11 17:28:51,115 ERROR [Package1LoggingClass:36] - This is an error Trace message
2018-05-11 17:28:51,116 FATAL [Package1LoggingClass:37] - This is a fatal Trace message

Мы видим, что [Zuraiz] не печатается в лог-файле.Любое решение этой проблемы?

1 Ответ

0 голосов
/ 11 мая 2018

Проблема решена.Я не указывал на текущий контекст регистрации.

Замена следующей строки

LoggerContext ctx = (LoggerContext) LogManager.getContext();

на

LoggerContext ctx = (LoggerContext) LogManager.getContext(false); 

выполнила мою работу.

...