2013-05-03 86 views
-1

我需要設計一個記錄器類,所有其他類都將使用它來記錄消息。目前,我在每個類中創建logger的poiner,並通過記錄器指針記錄消息來調用記錄器的方法。我想以單例模式設計它,它必須是線程安全的。任何人都可以提出一個好方法。C++記錄器的單選模式

+1

http://stackoverflow.com/questions/1008019/c-singleton-design-pattern?rq=1你檢查過了嗎? – olevegard 2013-05-03 06:18:37

+0

你不太可能需要一個單例,所以專注於一個不是單例的線程安全記錄器。這簡化了問題。 – juanchopanza 2013-05-03 06:19:09

回答

1

忘掉單身人士,只需在班級static。你可能會希望提供宏以方便訪問日誌的方法,例如:

#define logdbg(fmt, ...) Log::log(__FUNCTION__, Log::LEVEL_DEBUG, fmt, ##__VA_ARGS__) 

,當作爲一個單獨實施將需要:

#define logdbg(fmt, ...) Log::instance().log(__FUNCTION__, Log::LEVEL_DEBUG, fmt, ##__VA_ARGS__) 

這使得差別很小。

+1

我認爲這是忽略了線程安全問題,這可能是主要的問題(雖然很難確切知道OP的要求是什麼)。 – juanchopanza 2013-05-03 06:36:18

+1

@juanchopanza單例模式如何幫助線程安全? – trojanfoe 2013-05-03 06:38:03

+0

我從來沒有說過。顯然它沒有。但是你的解決方案中沒有任何東西可以解決線程安全問題,這似乎是OP的一個擔憂。 – juanchopanza 2013-05-03 06:58:51