Управление файломAppender с помощью log4j2 программно - PullRequest
0 голосов
/ 14 января 2019

новый файл не создается при наведении на логгер

У меня есть инфраструктура автоматизации, которая создает журналы программно с использованием log4j и sslf4j, мой код создает и катит appenders во время выполнения

вот как я создаю файл appender.

private static synchronized void createFileAppender(String testName, Logger logger, String filename,
            String fileNamePattern, PatternLayout logLayout) throws IOException {
        org.apache.logging.log4j.core.Logger coreLogger = (org.apache.logging.log4j.core.Logger) logger;
        LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) coreLogger.getContext();
        Configuration configuration = context.getConfiguration();
        if (configuration.getAppender(testName) == null) {
            System.out.println(">>>> Create new appender for test: " + testName);
            RollingFileAppender fileAppender = RollingFileAppender.newBuilder().withFileName(filename)
                    .withFilePattern(fileNamePattern).withLayout(logLayout).withName(testName)
                    .withConfiguration(configuration)
                    .withPolicy(OnStartupTriggeringPolicy.createPolicy(0))

                    .withAppend(true)
                    .build();
            fileAppender.getManager().setRolloverStrategy(DefaultRolloverStrategy.
                    createStrategy("10", "0", "10", null, null, true, configuration));

            File f = new File(fileAppender.getFileName());
            if (!f.exists()) {
                System.out.println("Log file creation failed, retrying");
            } else {
                System.out.println("Log file path " + f.getAbsolutePath());
            }
            // fileAppender.setName(testName);
            fileAppender.start();
            configuration.addAppender(fileAppender);
            LoggerConfig loggerConfig = new LoggerConfig(testName, Level.ALL, false);
            loggerConfig.addAppender(fileAppender, Level.ALL, null);
            configuration.addLogger(testName, loggerConfig);
            context.updateLoggers(configuration);

        }
    }

и вот как я перевернул его.

    public static void rollOverLog() {
        String testName = getTestLogName();
        Logger logger = LogManager.getLogger(testName);
        org.apache.logging.log4j.core.Logger coreLogger = (org.apache.logging.log4j.core.Logger) logger;
        LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) coreLogger.getContext();
        Configuration configuration = context.getConfiguration();
        RollingFileAppender fileAppender = (RollingFileAppender) configuration.getAppender(testName);
        if (fileAppender != null) {
            fileAppender.getManager().rollover();
        }
    }

Проблема в том, что когда я переворачиваю его, файл удаляется и воссоздается но предыдущий контент потерян.

...