我們都知道日誌,好吧,但爲什麼我們應該考慮「記錄器」類單身?如果我們將它作爲正常的非 -singleton類會發生什麼?爲什麼我們應該將「Logger」類作爲單例考慮?
9
A
回答
13
我在IBM網站上找到了此處。它很好地解釋了Logger Singleton類的用法。
真正的單身人士 的一個典型例子是日誌記錄服務。假設我們有一個基於事件的日誌記錄服務 :客戶端 對象請求文本被記錄日誌 發送消息到記錄 服務。通過監聽這些日誌記錄請求的日誌記錄 服務和處理它們的 ,其他對象實際上在某處(控制檯,文件, )記錄了 文本。首先,請注意 日誌服務通過經典 測試,作爲一個單身:
- 請求者需要一個衆所周知的對象,該對象將請求發送到 日誌。這意味着訪問的全局點爲 。
- 由於日誌記錄服務是多個 聽衆可以註冊的單個事件源,因此只有 需要是一個實例。
下面的鏈接:Use your singletons wisely
如果你不會使用一個單獨的類,你將不得不處理這些不同的記錄器之間的同步(寫入文件,或者任何你使用流)實例。所以當你只有一個全局Logger實例時,它更容易。
0
取決於日誌框架。通常你想要所有的消息都去一個日誌,所以你想要所有的代碼使用相同的記錄器。但是記錄器類並不一定是一個單獨的東西來確保這一點。
2
主要問題是實際日誌持續存在的位置。
如果您正在一個文件系統上編寫,有多個實例(因此可能會有多個線程)可能會導致出現亂碼文件。
從某種意義上說,根據緩衝和其他低級機制,來自一個寫入的消息可能最終與來自其他消息的消息(或消息的一部分)混合在一起。
這可能是一個小問題,但它是我能想到的關於只有一個(因此是串行)日誌寫入對象的唯一的問題。
2
如果您有多個具有不同內容的日誌流,則可以使用針對不同輸出初始化的多個記錄器類實例。
但是,如果您只有一個日誌流,則具有多個日誌記錄類實例會導致更復雜的實現,因爲實例必須一起工作來管理實際資源。例如考慮一個記錄器,每個消息記錄一個序列號。兩個實例將不得不同步他們的序列計數器,這要求他們相互討論,協商計數器增加等等。(在靜態類成員中共享計數器的替代方案相當於具有單例記錄器)
相關問題
- 1. 我們應該考慮將Flash作爲最後的手段嗎?
- 2. 何時以及爲什麼我應該考慮asp.net MVC?
- 3. Apriori算法的最終輸出我們應該考慮什麼
- 4. 選擇SQL/NoSQL應該考慮什麼?
- 5. 爲企業創建報告框架時應該考慮什麼?
- 6. 爲什麼我們應該阻止在iOS中創建單例實例,swift
- 7. 我們應該爲自定義Web應用程序考慮哪些框架?
- 8. 圖層有什麼用處?我能做些什麼來添加圖層,爲什麼我應該考慮圖層?
- 9. 我們應該什麼時候考慮使用私人還是保護?
- 10. 什麼時候應該考慮製作庫標題?
- 11. 什麼是VS我應該考慮的Resharper插件的列表?
- 12. 我應該什麼時候開始考慮轉向Python 3?
- 13. 在Windows 7上開發.NET之前,我應該考慮什麼?
- 14. 何時以及爲什麼我們應該使用類System.ComponentModel.Container?
- 15. 爲什麼UITabBar會考慮Modal?
- 16. 爲什麼AutoConfigurationPackages不考慮@ComponentScan?
- 17. 我們應該什麼時候將字符串更改爲Stringbuilder?
- 18. 從一個單例類考慮繼承
- 19. 爲什麼對象類方法將類的實例作爲它們的參數
- 20. 爲什麼我應該創建View類的實例?
- 21. 在決定如何將回調傳遞給addEventListener時,我應該考慮什麼?
- 22. 我應該使用什麼窗口管理器作爲示例?
- 23. 爲什麼我們需要將Object類作爲所有類的基類?
- 24. 爲什麼區分方法時不考慮返回類型?
- 25. 爲什麼我的Imagemagick轉換器不考慮循環參數?
- 26. 爲什麼remove()會考慮我的實體數組
- 27. 在創建用於torrent的asp.net應用程序時,我應該考慮什麼?
- 28. 對於我的遊戲的主循環我應該考慮什麼:DispatcherTimer與StoryBoard
- 29. 我們正考慮將我們的網站移植到wordpress中