在多线程应用程序中记录框架和同步

时间:2013-05-14 13:06:46

标签: multithreading logging

我想在多线程应用程序中使用log4cxx等日志框架。

如果日志的输出将是文件,则需要正确序列化消息。 我问自己这些框架是如何(如果)得到输出的正确序列化而不使用某种同步对象。

我想如果它使用同步对象(例如访问队列来记录消息),这可能会导致所涉及线程的行为发生变化,因此也会改变行为(和bug ...)整个记录的应用程序。

1 个答案:

答案 0 :(得分:2)

log4cxx确实是同步的,就像其他log4XXX框架一样。同步在appender中完成,并且必须保证日志条目的内容不会混合在一起。此不会更改线程的行为,但线程确实会遇到小的性能损失。与记录到文件时I / O的性能相比,性能损失很小。

如果您仍然担心性能,可以考虑使用异步日志记录(使用处理单独线程中的日志记录的AsyncAppender。使用异步方法无法保证记录消息(例如,如果应用程序崩溃)在日志记录线程处理消息之前。)提高性能的最简单方法是减少日志记录量。