我需要設計一個記錄器類,所有其他類都將使用它來記錄消息。目前,我在每個類中創建logger的poiner,並通過記錄器指針記錄消息來調用記錄器的方法。我想以單例模式設計它,它必須是線程安全的。任何人都可以提出一個好方法。C++記錄器的單選模式
回答
忘掉單身人士,只需在班級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__)
這使得差別很小。
我認爲這是忽略了線程安全問題,這可能是主要的問題(雖然很難確切知道OP的要求是什麼)。 – juanchopanza 2013-05-03 06:36:18
@juanchopanza單例模式如何幫助線程安全? – trojanfoe 2013-05-03 06:38:03
我從來沒有說過。顯然它沒有。但是你的解決方案中沒有任何東西可以解決線程安全問題,這似乎是OP的一個擔憂。 – juanchopanza 2013-05-03 06:58:51
- 1. 使用單例模式的簡單C++記錄器
- 2. Slf4j記錄器的模式
- 3. 選擇與模式匹配的記錄
- 4. 記錄模式
- 5. Selenium WebDriver記錄器PageObject模式
- 6. 基於正則表達式模式選擇不同的記錄
- 7. 通過篩選子記錄模式的2個實例軌記錄
- 8. 選擇單個記錄只
- 9. SQL - 查找記錄模式
- 10. RubyWatch記錄器的CloudWatch過濾器模式
- 11. Rails 3模型記錄器
- 12. 單一形式的模型的多個記錄
- 13. 簡單的記錄器流操作器
- 14. C#單例模式
- 15. C# - 單例模式
- 16. 簡單的形式collection_radio_buttons顯示從記錄模型項目
- 17. Linq選擇特定的記錄單元
- 18. Log4j將所有記錄器映射到單個記錄器
- 19. C中的單例模式#
- 20. JavaScript中的共享功能(例如記錄器)的OOP模式
- 21. Crystal Reports中的記錄選擇公式
- 22. 模式上Oozie的匹配記錄
- 23. 含模式匹配記錄的歧義
- 24. 相互記錄相關的模式
- 25. 檢查java中記錄的模式
- 26. 訪問的has_many模式記錄
- 27. F#記錄中的模式匹配
- 28. 進程ID中的logback記錄模式
- 29. 如何編輯模式中的記錄
- 30. C++簡單的條件日誌記錄
http://stackoverflow.com/questions/1008019/c-singleton-design-pattern?rq=1你檢查過了嗎? – olevegard 2013-05-03 06:18:37
你不太可能需要一個單例,所以專注於一個不是單例的線程安全記錄器。這簡化了問題。 – juanchopanza 2013-05-03 06:19:09