【问题标题】:Log4j2 with MemoryMappedFile and break filesLog4j2 与 MemoryMappedFile 和中断文件
【发布时间】:2016-04-25 02:14:20
【问题描述】:

是否可以使用带有策略的 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>

【问题讨论】:

  • 内存映射文件和滚动文件追加器都扩展了抽象输出流追加器。您应该能够创建一个扩展抽象流附加程序的插件,并基本上复制和粘贴 mmap 文件和滚动文件的功能。

标签: java logging configuration log4j log4j2


【解决方案1】:

(背景:我是 MemoryMappedFile appender 和 Async Loggers 的作者。)

在某种意义上,MemoryMappedFile appender 仍在进行中(从 Log4j 2.5 开始)。正如您所提到的,没有滚动变体。此外,我还无法进行任何重要的性能测试。前段时间我made a start,但其他问题优先考虑。

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

一般来说,如果您需要翻转行为,我建议您现在将 Async Loggers 与 RollingRandomAccessFile appender 结合使用。

【讨论】:

  • 目前我将 Async Loggers 与 RollingRandomAccessFile appender 结合使用。但我需要减少 HDD IO 操作(例如,避免创建 plain_log.txt:写入 MemoryMappedFile 或即时压缩)。在不编写手工插件的情况下,最简单的方法是什么?
  • log4j 不支持在记录时压缩。 Async Loggers + RandomAccessFile appender 有什么问题?这是提供始终如一的高性能的设置,我会推荐。 MemoryMappedFile 的内容在大多数情况下可能会稍微快一些,而在某些时候很多会慢一些(尤其是重新映射可能需要几秒钟)。
  • 问题是RollingRandomAccessFile将文件写入HDD,然后读取,然后压缩滚动。尽管我们在 CPU 使用率方面获得了显着的性能,但 IO 百分比很高。目标是减少它。是否可以修改一些现有的 appender 以将 plain_log.txt 保留在 RAM 而不是 HDD 中,或者添加动态压缩支持?
  • 是的,您可以增加 RandomAccessFile appender 的缓冲区大小(请参阅用户手册)。但最终听起来,应用程序只是记录的内容超出了人们对您的操作感到满意的程度......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多