我想在多线程应用程序中使用像 log4cxx 这样的日志框架。
如果日志输出到文件,则需要正确序列化消息。我在问自己这些框架如何(以及是否)在不使用某种同步对象的情况下正确序列化输出。
我猜如果它使用同步对象(例如访问队列以记录消息),这可能会导致所涉及线程的行为发生变化,因此也会改变整个记录应用程序的行为(和错误......) .
我想在多线程应用程序中使用像 log4cxx 这样的日志框架。
如果日志输出到文件,则需要正确序列化消息。我在问自己这些框架如何(以及是否)在不使用某种同步对象的情况下正确序列化输出。
我猜如果它使用同步对象(例如访问队列以记录消息),这可能会导致所涉及线程的行为发生变化,因此也会改变整个记录应用程序的行为(和错误......) .
log4cxx 确实是同步的,就像其他 log4XXX 框架一样。同步在附加程序中完成,并且对于保证日志条目的内容不会混合在一起是必要的。这不会改变线程的行为,但线程确实会遇到小的性能损失。与记录到文件时的 I/O 性能损失相比,性能损失很小。
如果您仍然担心性能,您可以考虑使用异步日志记录(使用在单独线程中处理日志记录的AsyncAppender。使用异步方法您不能保证记录消息(例如,如果应用程序在日志线程处理消息之前崩溃) ). 提高性能最简单的方法是减少日志记录量。