日志库EasyLogging++学习系列(11)—— 共享日志库
在前面的學習系列文章中,我們都是在單獨的一個應用程序中使用 Easylogging++ 日志庫。其實?Easylogging++ 日志庫是可以共享給動態庫、靜態庫以及應用程序共同使用的。在編寫一些大型程序的時候,我們往往會把各個功能分別封裝成一個動態庫,然后再編寫一個主程序來負責調用這些動態庫就可以了。現在假設我們想在主程序和各個動態庫中都使用?Easylogging++ 來記錄日志,那么我們需要在主程序和各個動態庫中的代碼中都包含?Easylogging++ 的頭文件,然后再分別設置主程序和各個動態庫的日志配置。這是一個非常繁瑣的事情,而且很容易把主程序和各個動態庫中的日志配置成保存在同一個文件里,這可能會造成多個動態庫同時對同一個日志文件進行寫操作的情形,從而可能會使得日志內容亂成一團。但是因為主程序和各個動態庫合并起來才算是一個完整的程序,我們又確實想把主程序和各個動態庫中相同級別的的日志都保存在同一個文件中,那么我們只需要使用?Easylogging++ 的共享功能,就可以完美地滿足我們的需求,并且還能避免上述所說的問題。
在 Easylogging++ 日志庫的源碼中,有一個名為 Storage 的類,這個類是負責維護 Easylogging++ 日志庫數據的主要入口,比如日志記錄器的管理,日志配置的管理等都是在 Storage 類中完成的。默認情況下,我們每調用一次初始化宏?INITIALIZE_EASYLOGGINGPP?就會創建一個?Storage 類對象,所以不同的程序就會有不同的?Storage 類對象在負責維護相應的日志記錄器和日志配置。如果我們只創建一次?Storage 類對象,然后再將這個對象共享給其他使用?Easylogging++ 日志庫的程序使用,那么就可以保證所有程序都在使用同一個?Storage 類對象維護的日志記錄器和日志配置,如同在單獨的應用程序中使用日志記錄一樣方便和安全。
為了使用共享的?Storage 類對象,在其他程序中我們不能用宏?INITIALIZE_EASYLOGGINGPP 來初始化日志庫,應該改用以下兩個宏定義中任意一個:
- ?INITIALIZE_NULL_EASYLOGGINGPP
- SHARE_EASYLOGGINGPP
- INITIALIZE_EASYLOGGINGPP
- ELPP_INIT_EASYLOGGINGPP
- INITIALIZE_NULL_EASYLOGGINGPP
- SHARE_EASYLOGGINGPP
最后通過一個完整的演示工程來說明如何只創建一個?Storage 類對象,然后再將該對象共享給其他工程使用。在演示工程有下面四個項目:
- ShareEasylogging++項目,一個動態庫工程,完成?Storage 類對象的創建,并提供獲取該對象的接口,以便其他工程共享該對象。
- ShareEasyloggingDll1項目,一個動態庫工程,演示了如何使用宏?SHARE_EASYLOGGINGPP?和共享的?Storage 類對象完成初始化。
- ShareEasyloggingDll2項目,一個動態庫工程,演示了如何使用宏?SHARE_EASYLOGGINGPP?和共享的?Storage 類對象完成初始化。
- ShareEasyloggingTest項目,演示工程主程序,演示了如何使用宏?INITIALIZE_NULL_EASYLOGGINGPP?和共享的?Storage 類對象完成初始化。
完整的演示工程代碼下載:猛戳這里。
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的日志库EasyLogging++学习系列(11)—— 共享日志库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux如何清除last信息,linu
- 下一篇: MFC隐藏和显示一个控件的方法