2010-03-18 55 views
3

聲明:我不是一個C++開發人員,我只能做基本的事情。 (我知道指針,只是我的知識是如此生疏,我沒有觸及C/C++大約20年:))C++簡單的條件日誌記錄

設置:我有一個Outlook插件,用C#/.Net 1.1編寫。它使用c++ shim加載。

通常情況下,這工作得很好,我使用我的C#代碼nlog進行日誌記錄。但有時,外掛程序無法加載,i.t.它根本不打託管代碼,因此我無法從日誌文件中調查問題。

所以,我需要鉤住一些基本的日誌記錄到C++ shim中 - 只需寫入一個文件即可。我需要儘可能簡化我們的用戶啓用。其實我不想默認發貨。

我在想什麼,它會檢查一個特定的DLL是否存在(日誌記錄dll),如果是,使用它。否則,它將不會記錄任何內容。這樣,當我有一個用戶遇到這樣的問題時,我可以只發送日誌dll,用戶將它保存到運行時目錄中,然後我將擁有該文件。

我想這必須用某種形式的工廠解決方案來完成,該解決方案返回一個虛擬記錄器,或者如果找到了dll,這是一個真正的記錄器。

另一種選擇是製作一些簡單的記錄器,並根據指令重新編制或使用它的墊片。這不是可取的方法,因爲墊片需要簽名,我必須指示用戶製作「真實」備份副本,然後在完成時恢復等,而不是隻保存和刪除dll 。

我很感激任何好的建議如何處理它,連同鏈接或示例代碼如何去之後。

Cheers

回答

2

加載日誌記錄DLL的接縫就像處理配置問題的複雜方式。爲什麼不使用註冊表。如果你在dll上使用條件加載,你將會使用LoadLibraryGetProceAddress,正如你所說的你不是一個真正的C++編碼器,那麼爲什麼要介紹複雜性。你也可以看到n + 1個C++日誌庫。


我的一些谷歌搜索後發現

+0

是的,log4cplus也不錯:http://log4cplus.sourceforge.net/ – neuro 2010-03-18 16:13:07

1

爲什麼沒有註冊表項呢?用戶打開註冊表編輯器,添加一個鍵並開始記錄庫。日誌代碼將一直存在,只是在沒有密鑰或設置爲「不記錄」時纔會調用。

+0

是的,可以做到的。通常我不想讓用戶觸摸他們的註冊表。不過,我需要一個示例代碼,或者針對某些日誌記錄庫/框架的建議。 – 2010-03-18 14:31:05

+0

是的,但你可以打開遠程日誌如果theres和問題以及如何使用dll任何easer爲用戶。 – rerun 2010-03-18 14:35:21