回送可靠性

问题描述 投票:2回答:2

Log4j根据以下常见问题是不可靠的:http://logging.apache.org/log4j/1.2/faq.html#a1.2“否。log4j不可靠。它是尽力而为的故障停止日志记录系统。”

Logback是否更可靠?例如,当在很短的时间内使用logback写入1000条日志消息时,它可能会静默地丢失一些消息。谢谢,苏尼尔

logback
2个回答
1
投票

我认为Logback也是尽力而为的故障停止日志记录系统。运行此代码段:

for (int i = 0; i < 8; i++) {
    System.out.println("log " + i);
    logger.info("log {}", i);
    Thread.sleep(2000);
}

带有FileAppender

<appender name="file" class="ch.qos.logback.core.FileAppender">
    <file>/mnt/logtest/testlog.log</file>
    <append>false</append>
    <encoder>
        <pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</pattern>
    </encoder>
</appender>

在没有可用空间的磁盘上。然后它运行没有任何错误。几秒钟后,我从磁盘上删除了一些文件。testlog.log文件的内容是:

2011-10-07 08:19:01,687 [main] INFO  logbacktest.LoopLog - log 5
2011-10-07 08:19:03,688 [main] INFO  logbacktest.LoopLog - log 6
2011-10-07 08:19:05,688 [main] INFO  logbacktest.LoopLog - log 7

文件中没有log 0-log 4行。我认为其他附加器不会更可靠。


在正常操作条件下(例如,系统具有足够的磁盘空间),我从未见过Logback丢失消息。从这个意义上说,我认为它是可靠的。但是,如果您要进行审核日志记录,我认为您应该使用其他方法,而不是尽力而为的故障停止日志记录系统。 (如果攻击者找到了一种通过填充磁盘空间来禁用日志记录的方法,则他可以在用户界面上执行所有操作而无需任何审核日志,并且会注意到磁盘已满。)


0
投票

简短的回答是“否,登录不可靠。即使使用其他日志记录框架(例如log4j,log4j2,JUL等)对其进行基准测试,也非常不可靠。

实际上,Logback具有最高的性能,但是为了做到这一点,它会丢弃一些日志事件。这是由于Logback的AsyncAppender的行为所致,如果队列已满80%,该事件会将事件降至警告级别以下。

通常在快速和可靠的日志记录之间进行权衡。特别是,通过删除大量事件,尤其是在使用异步附加程序时,Logback可以最大化性能。 Log4j 1.2.17和2.3趋于保守一些,但无法提供几乎相同的性能提升。

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