Multithreading 多线程应用程序中的日志框架和同步

Multithreading 多线程应用程序中的日志框架和同步,multithreading,logging,Multithreading,Logging,我想在多线程应用程序中使用log4cxx这样的日志框架 如果将日志输出到文件,则需要对消息进行正确的序列化。 我在问自己,这些框架如何(以及是否)在不使用某种同步对象的情况下获得输出的正确序列化 我猜想,如果它使用同步对象(例如访问队列以记录消息),这可能会导致相关线程的行为发生变化,因此也会改变整个已记录应用程序的行为(和bug…)。log4cxx确实是同步的,就像其他log4XXX框架一样。同步是在appender中完成的,这对于保证日志条目的内容不会混合在一起是必要的。这不会改变线程的行为

我想在多线程应用程序中使用log4cxx这样的日志框架

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


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

log4cxx确实是同步的,就像其他log4XXX框架一样。同步是在appender中完成的,这对于保证日志条目的内容不会混合在一起是必要的。这不会改变线程的行为,但是线程确实会遇到一个小的性能影响。与登录到文件时I/O的性能影响相比,性能影响较小

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