我想在我的声音处理多线程应用程序中跟踪事件。它只有在某些情况下才会出现一些错误。
如果我尝试使用传统的日志记录(slf4j 和 log4j 到控制台被 Eclipse 拦截),那么错误就会消失,因为日志记录命令会引入毫秒级延迟并且一切都会有所不同。
如何使记录速度更快(数百或数千次)或以其他方式记录?
更新
现在使用带有文件附加器的 logback 就足够了。
我想在我的声音处理多线程应用程序中跟踪事件。它只有在某些情况下才会出现一些错误。
如果我尝试使用传统的日志记录(slf4j 和 log4j 到控制台被 Eclipse 拦截),那么错误就会消失,因为日志记录命令会引入毫秒级延迟并且一切都会有所不同。
如何使记录速度更快(数百或数千次)或以其他方式记录?
更新
现在使用带有文件附加器的 logback 就足够了。
答案很简单:永远不要在 Eclipse 控制台上打印任何内容。仅写入文件并在完成后查看文件。Log4j 本身的性能非常好。
您可能会发现将文本写入文件已经足够快了,所以我将从它开始。
如果你需要亚微秒级的文本或二进制日志,你可以使用我写的Java Chronicle 。
如果要达到纳秒级,则必须采用异步方式,这意味着磁盘 I/O 由单独的线程执行。无锁队列(即Disruptor、CoralQueue等)非常有效地提供线程之间的流水线,而不会为 GC 产生任何垃圾。
对于非常快(~ 100 nanos / msg)的记录器,您可以检查CoralLog。
对于非常快(~ 70 nanos /msg)的读/写存储,您可以检查CoralStore。
免责声明:我是 CoralQueue、CoralLog 和 CoralStore 的开发者之一。