根据以下常见问题,Log4j不可靠: http://logging.apache.org/log4j/1.2/faq.html#a1.2 “没有.log4j不可靠。它是一种尽力而为的故障停止记录系统。”
Logback更可靠吗?是否有可能在很短的时间内使用logback写入1000条日志消息(例如),它可能会默默地丢失一些消息。 谢谢, 苏尼尔
答案 0 :(得分: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
行。我不认为其他appender更可靠。
在正常操作条件下(例如系统有足够的磁盘空间)我从未见过Logback丢失了一条消息。在那个意思中我认为它是可靠的。但是如果你想进行审计日志记录,我认为你应该使用其他东西,而不是尽力而为的故障停止日志记录系统。 (如果攻击者通过填充磁盘空间找到了禁用日志记录的方法,他可以在没有任何审核日志的情况下在用户界面上执行所有操作,并注意磁盘已满。)
答案 1 :(得分:0)
简短的回答是“否”,登录不可靠。即使使用其他日志记录框架(例如log4j,log4j2,JUL等)对它进行基准测试也非常不可靠。
事实上,Logback具有最高的性能,但是为了达到目的,它会丢弃一些日志事件。这是由于Logback的AsyncAppender的行为所致,如果队列已满80%,该事件会将事件降至警告级别以下。
在快速和可靠的日志记录之间通常需要权衡取舍。特别是,通过删除大量事件,尤其是在使用异步附加程序时,Logback可以最大化性能。 Log4j 1.2.17和2.3趋于保守一些,但无法提供几乎相同的性能提升。