2013-01-15 24 views
3

我想跟踪我的声音处理多线程应用程序中的事件。它只有在某些情况下才会有一些错误。建议非常快(微秒)的java日志记录?

如果我试图用常规测井(SLF4J和log4j的到控制台通过Eclipse的拦截),错误就会消失,因为记录命令引入毫秒级的延迟,万事如意不同。

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

UPDATE

现在使用的logback与文件附加器,它是足够的呢。

+2

基本上 - 你需要从你的脸上获得文件IO。尝试附加到“StringBuilder”或“ArrayList ”或“BlockingQueue ”。 – OldCurmudgeon

+0

如何编写自定义的'Appender'并在内存中存储日志消息,或者甚至是异步? –

+3

除了已经提到的事情,我会尝试logback http://logback.qos.ch/reasonsToSwitch.html(因为它可能更高性能为log4j) –

回答

8

答案很简单:永远不要打印什么到Eclipse控制台。只写入文件并在完成后查看文件。 Log4j本身非常高效。

+0

在这种情况下写入文件也不慢? – Montolide

+0

Eclipse控制台的速度不够快。它在微秒范围内。 –

2

您可能会发现将文本写入文件的速度足够快,所以我会从此开始。

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

+0

嘿,第二部分看起来像广告为您的产品:),但嘿,谢谢分享! –

+1

@PeterButkovic真的,这是它的设计目的。 –

1

如果你想要去的纳秒级你必须去异步的,这意味着磁盘I/O是由一个单独的线程来执行。无锁队列(即Disruptor,CoralQueue等)非常高效地在线程之间提供流水线,而不会为GC产生任何垃圾。

对于您可以检查CoralLog非常快(〜100毫微秒/ MSG)记录。

对于非常快(〜70毫微秒/ MSG)的读/写商店,你可以检查CoralStore

声明:我是CoralQueue,CoralLog和CoralStore的开发人员之一。