java – 带有MemoryMappedFile和break文件的Log4j2

是否可以将MemoryMappedFile与策略一起使用以将文件分解为固定大小,例如250MB?我的log4j2.xml是这样的,但我想将日志文件分解为250MB,我需要使用MemoryMappedFile来实现IO性能.

<Configuration monitorInterval="30">
    <Appenders>
        <MemoryMappedFile name="MemoryMap" fileName="output/jscsi-out.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c{2} - %m%n(%L)" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="250 MB" />
            </Policies>
        </MemoryMappedFile>
    </Appenders>

    <Loggers>
        <Logger name="br.com" level="debug" additivity="false">
            <AppenderRef ref="MemoryMap" />
        </Logger>
        <Logger name="org.jscsi.target.TargetServer" level="debug"
            additivity="false">
            <AppenderRef ref="MemoryMap" />
        </Logger>
        <Logger name="org.jscsi.target.storage" level="info"
            additivity="false">
            <AppenderRef ref="MemoryMap" />
        </Logger>
        <Logger name="org.jscsi.service" level="debug" additivity="false">
            <AppenderRef ref="MemoryMap" />
        </Logger>
        <Root level="error" includeLocation="true">
            <AppenderRef ref="MemoryMap" />
        </Root>
    </Loggers>
</Configuration>

解决方法:

(背景:我是MemoryMappedFile appender以及异步记录器的作者.)

在某种意义上,MemoryMappedFile appender仍在进行中(从Log4j 2.5开始).如你所述,没有Rolling变体.此外,我还没有能够进行任何重要的性能测试.我made a start前一段时间,但其他问题优先考虑.

初始性能测试表明,即使使用MemoryMappedFile appender,同步日志记录也不可能比通过Async Loggers进行异步日志记录更快.

通常,如果您需要翻转行为,我建议您现在将Async Loggers与RollingRandomAccessFile appender结合使用.

上一篇:Log4j2源码分析系列:(一)配置加载


下一篇:java – 为什么Apache Kafka使用者不使用Log4j2根记录器?