log4j立即Flush截断行

问题描述 投票:0回答:1

我尝试在异步模式下使用 log4j,它可以工作,但是当它写入日志时,它不会结束该行。一行部分将保留在内存中,直到下一次写作。是否有一个配置可以强制它在开始写入时结束一行

log4j 配置:

<RollingFile name="ordsLogger"
                         fileName="${sys:catalina.base}/logs/ords_sante.log"
                         immediateFlush="true" complete="true"
                         filePattern="${sys:catalina.base}/logs/ords_sante-%d{yyyy-MM-dd}.log">
        <PatternLayout>
            <pattern>|%msg%n
            </pattern>
            <charset>UTF-8</charset>
            <PatternLayout pattern="..." charset="UTF-8"/>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            <SizeBasedTriggeringPolicy size="10MB" />
        </Policies>
        <!-- Max 10 files will be created everyday -->
        <DefaultRolloverStrategy max="10">
            <Delete basePath="${sys:catalina.base}/logs/" maxDepth="10">
                <!-- Delete all files older than 30 days -->
                <IfLastModified age="30d" />
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>

目标是让filebeat读取日志文件,所以该行必须完成

log4j2
1个回答
0
投票

尝试在

bufferedIo
元素中将
false
设置为
RollingFile
,因为所有基于
true
的附加程序默认设置为
OutputStream
。您还应该将
bufferSize
设置为 0 以防止出现警告日志消息,因为默认缓冲区大小非零(禁用缓冲的非零缓冲区大小会发出警告)。

© www.soinside.com 2019 - 2024. All rights reserved.