2013-05-14 93 views
1

我想在多線程應用程序中使用類似log4cxx的日誌框架。在多線程應用程序中記錄框架和同步

如果日誌的輸出將是一個文件,則需要對消息進行正確的序列化。 我在問自己如何(以及如果)這些框架得到正確的輸出序列化,而不使用某種類型的同步對象。我猜如果它使用同步對象(例如訪問一個隊列來記錄消息),這可能會導致涉及的線程的行爲發生變化,所以也會改變行爲(和錯誤...)的行爲(和錯誤...)整個日誌應用程序。

回答

2

log4cxx確實與其他log4XXX框架同步。同步在appender中完成,並且必須保證日誌條目的內容不會混合在一起。這不會改變你的線程的行爲,但線程確實遇到一個小的性能影響。與登錄到文件時的I/O性能相比,性能下降幅度較小。

如果您仍然擔心性能,可以考慮使用異步日誌記錄(使用在獨立線程中處理日誌記錄的AsyncAppender)。使用異步方法不能保證消息被記錄(例如,如果應用程序在日誌記錄之前崩潰線程處理消息)提高性能的最簡單的方法是減少日誌記錄的數量