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

Log4j2 RollingFile追加冲突

公西天逸
2023-03-14

Log4j2 RollingFile追加冲突

下面是我们的log4j2配置文件的简化调试版本(我们每晚滚动,而不是每分钟滚动!)。
这个配置,而不是每分钟创建一个滚动文件
(根据TimeBasedTriggeringPolicy),将创建一个滚动文件(非tarred),包含JSON格式的日志记录,每20KB将被覆盖
(尽管它最终将略大于20KB(参见屏幕截图)。
我们还会得到以下错误(缩写为“...”):-

2016-10-07 08:47:34,433 default-workqueue-4 ERROR Unable to copy file /.../logs/logFile-2016-10-07-08:47:11.log to /.../logs/logFile-2016-10-07-08:47:11.log: java.nio.file.NoSuchFileException /.../logs/logFile-2016-10-07-08:47:11.log

如果我们切换timeBasedRollingFileJsonLayout附加器和SizeBasedRollingFilePatternLayoutithZippedArchive附加器的顺序,则根本不会发生翻转。

如果我们删除SizeBasedRollingFilePatternLayoutithZippedarChive附加器,那么timeBasedRollingFileJsonLayout附加器将按预期工作。

我们有两个不同的附加程序用于不同的环境,其中日志可能与elk挂钩,也可能不与elk挂钩。
在实际的log4j2配置文件中,我们使用属性来为环境选择适当的附加程序。
为了清晰起见,我从该文件中删除了属性,并排除了它们作为问题的可能原因。

我们使用的是log4j2.6.2。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %logger{36} - %msg %n" /> 
        </Console>
        <RollingFile name="timeBasedRollingFileJsonLayout" append="true" fileName="logs/logFile.log" filePattern="logs/logFile-%d{yyyy-MM-dd-HH:mm}.log">
            <JSONLayout properties="true" compact="true" eventEol="true" />
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>
        <RollingFile name="sizeBasedRollingFilePatternLayoutWithZippedArchive" append="true"  fileName="logs/logFile.log"  filePattern="logs/logFile-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %logger{36} - %msg %n" /> 
            <Policies>
                <SizeBasedTriggeringPolicy size="20KB" />
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <logger name="logger.one" level="info" additivity="false">
            <AppenderRef ref="timeBasedRollingFileJsonLayout" />
        </logger>
        <Logger name="logger.two" level="info" additivity="false">
            <AppenderRef ref="timeBasedRollingFileJsonLayout" />
        </Logger>
        <Logger name="logger.three" level="info" additivity="false">
            <AppenderRef ref="timeBasedRollingFileJsonLayout" />
        </Logger>
        <Root level="info">
            <AppenderRef ref="timeBasedRollingFileJsonLayout" level="all" />
        </Root>
    </Loggers>
</Configuration>

共有1个答案

欧旻
2023-03-14

我不明白你为什么认为这应该行得通。您有两个appender试图写入同一个文件,试图基于不同的条件进行翻转,并翻转到具有不同名称的文件。这并不奇怪,您得到的文件是在使用错误,因为有两件事会同时打开它。

 类似资料:
  • 问题内容: 无法附加到吗? 我正在尝试附加到对象列表。摘录之后的片段是每当作业完成时都会调用的函数。 但是,当我尝试读取它时,我只会得到文件中的第一个。然后我得到java.io.StreamCorruptedException。 要阅读我正在使用 我不知道会出现多少个对象,因此我在阅读时没有例外。根据Google的说法,这是不可能的。我想知道是否有人知道吗? 问题答案: 这是窍门:子类Object

  • 问题内容: Go编程语言中此循环的计算复杂度是多少? 并以线性时间(重新分配内存和每个追加拷贝的一切),或在固定的时间里操作(比如在许多语言方式矢量类是implemnted)? 问题答案: Go编程语言规范说,如果需要,内置函数会重新分配。 附加并复制切片 如果s的容量不足以容纳附加值,则append分配一个新的,足够大的切片,使其既适合现有slice元素又适合附加值。因此,返回的切片可以引用不同

  • 问题内容: datum = soup.findAll(‘a’, {‘class’: ‘result-title’}) for data in datum: print(data.text) print(data.get(‘href’)) df = {‘Title’: data.text, ‘Url’: data.get(‘href’)} houseitems.append(df, ignore_i

  • 我试图用log4j的JPA Appender保存一些日志事件,我在这里遵循了教程(JPAAppender)。 但是当我测试记录器时,我得到一些关于log4j的log4j错误/警告。特性: 假设问题在log4j。属性文件,有帮助吗??谢谢

  • 由来 顾名思义,FileAppender类表示文件追加器。此对象持有一个一个文件,在内存中积累一定量的数据后统一追加到文件,此类只有在写入文件时打开文件,并在写入结束后关闭之。因此此类不需要关闭。 在调用append方法后会缓存于内存,只有超过容量后才会一次性写入文件,因此内存中随时有剩余未写入文件的内容,在最后必须调用flush方法将剩余内容刷入文件。 也就是说,这是一个支持缓存的文件内容追加器

  • 在“数据管理”页面,上方的“追加数据”按钮进入该功能 。 1.该功能会将“源表”里的数据全部复制到“目标表”中 2.两张表的数据类型必须一致。 3.两张表对应列名次序必须完全相同。