2010-11-03 20 views
0

我正在做一些不尋常的事情。創建自定義記錄器,我應該從log4net延伸課程

我有一個應用程序,它作爲一個Windows服務運行。

它所做的是,它監視一個文件夾,當有任何新文件放入該文件夾時,應用程序將對文件執行某些操作。 每當處理一個文件時出現錯誤。我需要創建一個文本文件,並將錯誤/異常信息放入該文本文件中。 (後來我可以做這個文件的東西)

所以有這樣的事情

FileWatch, when there is a new file, do following : 
    try 
    { 
     processing file 
    } 
    catch(Exception ex) 
    { 
     MyLogger write exception message into one new text file 
    } 

到目前爲止,我是如何做到的是。我創建了一個類,例如MyLogger,無論何時我新建一個MyLogger,它創建一個文本文件(名稱很重要,需要是特定格式),並且在MyLogger的「WriteError(string message)」中有一個方法,它寫入文本到該文件中。

因爲我在我的應用程序中使用log4net。你認爲我應該修改我的記錄器,從log4net擴展一些類,這樣我可以得到一些好處嗎? (不知道我會得到什麼樣的好處,但log4net的是一個很好的日誌框架,它處理文本文件的方式可能有我不知道的事)

感謝

回答

0

爲什麼不使用從Trace Listeners。 NET框架?它們提供了日誌記錄網絡的許多優點,而無需包含外部框架。

好處包括集中的日誌管理以及將輸出日誌導向一個或多個來源(如控制檯窗口,文本文件或Windows事件日誌)的功能。

+0

有人認爲我關心的是,我需要創建一個新的文本文件,當有任何異常。那些框架能夠做到這一點嗎? – jojo 2010-11-03 04:56:07

+0

它應該創建日誌文件,如果它不存在。 – 2010-11-03 19:55:44

0

你應該花一些時間來創建你自己的記錄器,它完全符合你的要求。這將是最好的方法。也很容易,你可以完全控制自定義,所以你可以使輸出的外觀和感覺像log4net一樣。您可以讓Google記錄示例並開始修改該示例。

1

我之前創建了log4net包裝。我發現這種方式很方便,因爲您並不總是知道項目開始時的日誌記錄要求。我的規則是,log4net庫只能從我自己的「logging」命名空間中引用。這樣,應用程序代碼只會調用封裝器,封裝器是與log4net功能唯一聯繫的點。

從長遠來看,可能值得投資建立自己的記錄器。如果你正確地封裝了log4net,你應該可以很容易地進行升級,而不必更改你的代碼。

+0

+1我完全同意 – 2010-11-03 05:57:42

+0

我理解封裝日誌框架,但爲什麼你想寫自己的日誌?這些框架有許多功能,你會放棄(或爲自己而痛苦地構建)。 – 2010-11-03 10:28:03

0

我不知道我是否會爲此目的使用日誌框架。我的印象是,在例外情況下編寫此文本文件是您業務流程的一部分。記錄用於不同目的,可以被關閉,而不會影響業務流程...如果
1)你想在整個應用程序中的許多地方一致的日誌記錄功能

1

log4net的或任何其他通用記錄是有幫助的;和/或
2)您想要自定義日誌格式,級別等。

從您的描述中可以看出,您的應用程序中有一點需要以特定方式記錄異常。如果這是正確的,那麼您可能從創建自定義記錄器中獲益不大 - 只需編寫一種方法,以您需要的方式將異常記錄到文件中。

如果我誤解了你,並且需要上面的通用記錄器(即1或2)爲true),那麼通過繼承記錄器或創建包裝來擴展log4net是很好的。

+0

嗨VladV,是啊,就像你明白。只有特定的方式有單點異常日誌。只有一個地方需要進行我的自定義日誌記錄,並且每次記錄日誌時,都需要一個具有給定名稱的新文本文件,該文件在運行時生成...... – jojo 2010-11-03 22:40:05

相關問題