当前位置: 首页 > 知识库问答 >
问题:

使用log4j2时日志文件为空

蓬意致
2023-03-14

我在我的项目中使用log4j2,如下所示:

    logger.log(Level.ERROR, this.logData);

我的配置文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>


<Configuration status="ERROR" DLog4jContextSelector="org.apache.logging.log4j.core.async.AsyncLoggerContextSelector">
    <Appenders>
        <!-- Async Loggers will auto-flush in batches, so switch off immediateFlush. -->
        <RandomAccessFile name="RandomAccessFile" fileName="C:\\logs\\log1.log" immediateFlush="false" append="false">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
            </PatternLayout>
        </RandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level="error" includeLocation="false">
            <AppenderRef ref="RandomAccessFile"/>
        </Root>
    </Loggers>

它创建了我的文件,我在其中记录了一些东西,但它仍然是空的。当我试图删除这个文件时,操作系统告诉我它正在使用中(若应用程序正在工作),但即使我停止应用程序,文件仍然是空的。

那么,我应该更改哪些设置以使其正常工作?

共有2个答案

漆雕洋
2023-03-14

我分享一个更干净、更容易的解决方案。

https://stackoverflow.com/a/33467370/3397345

添加名为log4j2的文件。组成部分属性。这可以在大多数maven或gradle项目中通过将其保存在src/main/resources中来实现。

通过向文件中添加以下行来设置上下文选择器的值。

Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

Log4j将首先尝试读取系统属性。如果系统属性为null,则默认情况下,它将返回到此文件中存储的值。

云令
2023-03-14

我怀疑异步日志记录没有正确打开。从beta-9开始,无法在XML配置中打开异步记录器,必须将系统属性Log4jContextSelector设置为“org.apache.logging.log4j.core.Async.AsyncLoggerContextSelector”。

在日志中看不到任何内容的原因是日志消息仍在缓冲区中,尚未刷新到磁盘。如果打开异步记录器,日志消息将自动刷新到磁盘。

 类似资料:
  • 我正在研究Wildfly 9/10。我使用定制的Log4j2配置文件编写了web应用程序。 配置文件正确地包含在war jar库中。 结果是,当我运行web应用程序时,它会生成以下文件: 但它继续在服务器控制台上打印日志,而文件保持为空。 相同的配置在独立应用程序上正常工作。我错过了什么? 更新当我部署我的应用程序时,服务器会打印以下调试级别信息:

  • 我希望由log4j2创建的日志文件在其文件名中包含日期模式,包括当前活动文件。也就是说,如果今天的日期是2016-12-15,我希望当前日志文件是lager-2016-12-15.log。当日期改变时,我希望创建一个名为lager-2016-12-16.log的新文件。 使用,我无法使当前活动日志文件的文件名中具有日期模式。我的log4j2.xml: 使用此配置,翻转时的复制被搞乱了。从fileN

  • 我从log4j1迁移过来。x到log4j2。我删除了log4j。属性文件并创建了log4j2。xml文件。迁移后,我运行了应用程序,但找不到。日志文件。 有没有人能告诉我

  • 我目前正在创建一个系统,可以有模块(把它们看作插件),其中每一个都可以有自己的日志,专用的。 我想使用log4j2项目进行日志记录,但我似乎在文件附加符方面遇到了一些麻烦。 主项目(模块加载器和整个事情的“核心”)应该有自己的日志文件,而模块应该有自己的日志文件(像)。 即使搜索也没有给我提供任何接近的解决方案,我找到的只是xml配置中预定义的文件日志--这不是我想要的。 感谢你的阅读;即使是最轻

  • 我按照这里的教程SpringEureka教程创建了一个基本的Eureka注册表jar应用程序。下一步是将日志记录更改为log4j2,这样我就可以使用Spring log4j2指南中的指南获得一个滚动文件。 我遇到的问题是,当我运行应用程序时,没有抛出错误,但是 eureka服务器日志仍会输出到控制台 已创建自定义日志输出文件“eureka.log”,但该文件为空 我编写的任何自定义日志,例如

  • 我怀疑缓存有问题。第一个文件附加器保存所有缓存以供写入,因此第二个文件附加器无法写入。我说的对吗?对此有什么解决办法? 谢谢你。