file - 日志文件不会生成完整的日志,尽管执行已完成

标签 file kotlin gradle logging

请原谅我好长时间。
我是日志记录实现的新手,我试图读取一个日志文件,该文件在每次运行构建时都会被覆盖。日志文件包含一些工作流程执行步骤的详细信息。

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>

我的记录器实现的示例代码片段:-

Note → I have api calls to other services and require those logs too in my file, hence I used mu.KLogging library as it made it super easy. I wasn’t able to get the logs from calls to other apis, using java.util.logging or org.apache.log4j libraries.


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文件时,此时日志文件中没有所有日志。出于某种原因,当我的构建完成时,日志的最后几行会此刻追加到文件中。 尽管是,但是已经发生了执行,我需要从日志中获取信息。

FYI -> I am using Gradle Build in Intellij



我试图理解为什么这种奇怪的行为?我该如何解决这个问题
生成正确,并且我的文件读取了直到该刻生成的所有日志?

最佳答案

您已将bufferedIo设置为true,并且将InstantFlush设置为false。这对于长时间运行的经常写入日志的应用程序具有良好的性能,但对于写入不多的应用程序来说,这意味着日志事件将位于缓冲区中等待写入。除非应用程序关闭,否则应清除缓冲区,除非将其杀死或出现其他终端错误以使其无法正常终止。

关于file - 日志文件不会生成完整的日志,尽管执行已完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61534376/

相关文章:

java - Deeplearning4j 示例不适用于 gradle

c - solaris 上的 C 中的 fopen

android-studio - 将 GoogleSignInOptions.requestScopes() 用于 Gmail API 时如何定义范围?

java - 将字符串发送到服务器,不带反斜杠

java - Android studio 中的 Android 注解 - 无法访问 Activity_?

build - 简单的gradle构建文件构建错误

c# - 在 C# 中写入 linux tty (/dev/) 文件

python - (Python) 如何测试文件中是否包含字符串

python - 扩大python输出文件中的写入空间

java - 在 Material Chipgroup (Android) 中检查 Animate Chip