Как исправить случайное ведение журнала в одной и той же строке, даже если он настроен на запуск каждого журнала с новой строки - PullRequest
0 голосов
/ 01 февраля 2019

Я использую log4j для регистрации событий в коде Java.У меня установлено, чтобы каждая строка журнала начиналась как новая строка с отметкой времени, потоком, уровнем журнала и классом, в котором запускается журнал.Таким образом, конфигурация выглядит следующим образом:

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
    logger = loggerContext.getLogger("com.asdf");
    logger.setAdditive(true);

    PatternLayoutEncoder encoder = new PatternLayoutEncoder();
    encoder.setContext(loggerContext);
    encoder.setPattern("%-5level %d [%thread:%M:%caller{1}]: %message%n");
    encoder.start();

    cucumberAppender = new CucumberAppender();
    cucumberAppender.setName("cucumber-appender");
    cucumberAppender.setContext(loggerContext);
    cucumberAppender.setScenario(scenario);
    cucumberAppender.setEncoder(encoder);
    cucumberAppender.start();

    logger.addAppender(cucumberAppender);
    loggerContext.start();

    logger().info("*********************************************");
    logger().info("*  Starting Scenario - {}", scenario.getName());
    logger().info("*********************************************\n");
}

@After
public void showScenarioResult(Scenario scenario) throws InterruptedException {

    logger().info("**************************************************************");
    logger().info("*  {} Scenario - {} ", scenario.getStatus(), scenario.getName());
    logger().info("**************************************************************\n");

    cucumberAppender.writeToScenario();
    cucumberAppender.stop();
    logger.detachAppender(cucumberAppender);
    logger.detachAndStopAllAppenders();
}

, которая в большинстве случаев правильно выводит журнал, например:

15:59:25.448 [main] INFO com.asdf.runner.steps.StepHooks -
********************************************* 15:59:25.449 [main] INFO com.asdf.runner.steps.StepHooks - *  Starting Scenario - Check Cache 15:59:25.450 [main] INFO com.asdf.runner.steps.StepHooks -
********************************************* 15:59:25.558 [main] DEBUG org.cache2k.core.util.Log - New instance, using SLF4J logging 15:59:25.575 [main] INFO org.cache2k.core.Cache2kCoreProviderImpl - cache2k starting. version=1.0.1.Final, build=undefined, defaultImplementation=HeapCache 15:59:25.629 [main] DEBUG org.cache2k.CacheManager:default - open name=default, id=wvl973, classloaderId=6us14y

Однако иногда следующая строка регистратора записывается ввыше, без использования новой строки, как показано ниже:

15:59:27.353 [main] INFO com.asdf.cache.CacheService - Creating a cache for [Kafka] service with specific types.15:59:27.354 [main] INFO com.asdf.runner.steps.StepHooks - **************************************************************
15:59:27.354 [main] INFO com.asdf.runner.steps.StepHooks - *  PASSED Scenario - Check Cache 
15:59:27.354 [main] INFO com.asdf.runner.steps.StepHooks - **************************************************************

Как видите, первая строка StepHooks идет в той же строке, что и CacheService, что неэстетично.

Что я могу изменить, чтобы журнал всегда входил в новую строку, без исключений, подобных этой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...