我尝试在异步模式下使用 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读取日志文件,所以该行必须完成
尝试在
bufferedIo
元素中将 false
设置为 RollingFile
,因为所有基于 true
的附加程序默认设置为 OutputStream
。您还应该将 bufferSize
设置为 0 以防止出现警告日志消息,因为默认缓冲区大小非零(禁用缓冲的非零缓冲区大小会发出警告)。