3

我想在我的声音处理多线程应用程序中跟踪事件。它只有在某些情况下才会出现一些错误。

如果我尝试使用传统的日志记录(slf4j 和 log4j 到控制台被 Eclipse 拦截),那么错误就会消失,因为日志记录命令会引入毫秒级延迟并且一切都会有所不同。

如何使记录速度更快(数百或数千次)或以其他方式记录?

更新

现在使用带有文件附加器的 logback 就足够了。

4

3 回答 3

8

答案很简单:永远不要在 Eclipse 控制台上打印任何内容。仅写入文件并在完成后查看文件。Log4j 本身的性能非常好。

于 2013-01-15T17:04:15.030 回答
2

您可能会发现将文本写入文件已经足够快了,所以我将从它开始。

如果你需要亚微秒级的文本或二进制日志,你可以使用我写的Java Chronicle 。

于 2013-01-15T17:12:54.787 回答
2

如果要达到纳秒级,则必须采用异步方式,这意味着磁盘 I/O 由单独的线程执行。无锁队列(即DisruptorCoralQueue等)非常有效地提供线程之间的流水线,而不会为 GC 产生任何垃圾。

对于非常快(~ 100 nanos / msg)的记录器,您可以检查CoralLog

对于非常快(~ 70 nanos /msg)的读/写存储,您可以检查CoralStore

免责声明:我是 CoralQueue、CoralLog 和 CoralStore 的开发者之一。

于 2014-12-30T21:09:22.383 回答