Файл журнала не генерирует полные журналы, хотя выполнение завершено - PullRequest
0 голосов
/ 01 мая 2020

Пожалуйста, извините за длинный пост. Я новичок ie в реализации журналирования и пытаюсь прочитать файл журнала, который перезаписывается при каждом запуске сборки. Файл журнала содержит сведения о некоторых шагах выполнения рабочего процесса.

Конфигурации для файла log4j2. xml: -

<appenders>
    <File name="InfoLog" fileName="build/var/debug.log" bufferedIO="true" immediateFlush="false" append="false">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z}{UTC} ~ [%t] ~ %-5level ~ %logger{1} ~ %msg%n"/>
    </File>
</appenders>

<loggers>
    <Root level="Debug">
        <AppenderRef ref="InfoLog"/>
    </Root>
</loggers>

Пример фрагмент кода для моей реализации логгера: -

Примечание → У меня есть вызовы API для других сервисов и мне тоже нужны эти журналы в моем файле, поэтому я использовал библиотеку mu.KLogging в качестве сделал это супер легко. Я не смог получить логи от звонков на другие API, используя библиотеки java .util.logging или org. apache .log4j.

import mu.KLogging
interface TestsLogger {

    companion object {
        val logger = KLogging().logger(" WORKFLOW STEPS ")
    }
} 

//In some class

logger.info { "Running ${(workflowMap.currentStep).toUpperCase()}" }
logger.error { workflowExecutionException }

Теперь, когда я при попытке чтения файла debug.log (через несколько секунд после выполнения всех шагов) по какой-то причине не все журналы читаются из файла.

TimeUnit.MILLISECONDS.sleep(5_000)
var lines: List<String> = Files.readAllLines(File("build/var/debug.log").toPath())

Окунувшись глубоко в причину такого поведения, я обнаружил, что, когда он пытается прочитать файл debug.log, в тот момент в файле журнала не было всех журналов. По какой-то причине последние несколько строк журналов добавляются в файл в тот момент, когда моя сборка завершается. Хотя , казни уже были выполнены, для которых мне нужна информация из журналов.

К вашему сведению -> Я использую Gradle Build в Intellij

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

1 Ответ

0 голосов
/ 01 мая 2020

Вы установили для bufferedIo значение true, а для немедленного сброса sh установлено значение false. Это хорошо для производительности в долго работающих приложениях, которые часто пишут журналы, но для приложения, которое не пишет много, это означает, что события журнала будут находиться в буфере, ожидая записи. Буферы должны быть сброшены при завершении работы приложения, если только оно не уничтожено или не имеет какой-либо другой ошибки терминала, которая не позволяет ему нормально завершиться.

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