2011-06-13 40 views
3

假設,爲了爭辯,我有30個需要有日誌記錄框架的asp.net web應用程序(和站點,blerg)。我目前的解決方案是使用企業庫日誌記錄。聞聽此事會在網站上包括以下步驟:幫助我找到適用於asp.net應用程序的最小摩擦日誌記錄解決方案

  1. 兩個組件(EL日誌記錄和公用)
  2. 添加代碼的global.asax.cs仿製未處理的錯誤在enterpriseLibrary捕捉
  3. 副本添加引用的.config,從另一個應用程序已經已經登錄FileConfigurationSource.cs
  4. 副本(它允許您覆蓋的硬編碼路徑enterpriseLibrary.config的要求)在FileConfigurationSource.cs
  5. 改變命名空間到新項目複製
  6. 複製從另一個項目所特有的EL(2段)的web.config部分
  7. 在web.config中改變命名空間EL在新項目
  8. 測試,確保它的工作(通常由數據庫脫機)

所有這些都是我說的摩擦。如果你問我,那就是DRY的很多違規行爲,尤其是在所有enterpriseLibrary.config設置中。理想情況下,添加日誌記錄將是一個兩步驟的過程 - 這將幫助我在整個團隊中採用它。

我不知道是否有.net的日誌解決方案,沒有所有這些重複?我可以找到的所有這些(log4net,nlog,EL Logging)似乎都使用這種「每個應用都有自己的配置,具有大量的重複」模式。也許我錯過了一些東西。

實際上,我們的每個應用程序都會有一個與其他99%相同的日誌記錄解決方案。他們在存儲日誌的位置和應用程序的調用方面會有所不同。有沒有辦法使用三大日誌解決方案之一,讓您在機器級別或更集中的地方設置日誌記錄行爲?我意識到有一個集中日誌配置有缺點。

同樣重要:必須能夠動態更改日誌記錄級別(在web.config中不存儲日誌記錄配置,導致應用程序重新啓動),並且日誌記錄必須可配置爲部署的一部分(不要在測試版服務器上發送關鍵錯誤的電子郵件)。這兩個使得使用web.config轉換變得困難,因爲對作爲你的構建的一部分而不是web.config的.config運行轉換是困難的。

回答

1

我發現了一個類似於你的問題的完美解決方案。

我有十個控制檯應用程序,兩個ASP .NET網站和三個的SharePoint的WebParts 記錄到一個單獨的目錄,日誌被按日期,應用程序名稱等分離得到的溶液是很容易配置和靈活允許配置動態變化

所有這些榮耀都由NLog帶來了生機,它允許來自應用程序特定配置文件的單個配置文件是included

更具體地講,在我們的情況下,每個項目包含個人 NLOG配置,其中顯示:

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     autoReload="true"> 
    <include file="PATH TO THE SHARED CONFIG" /> <!-- change this line --> 
</nlog> 

對於網絡應用程序,個人NLOG配置can be read from

  • 標準網絡應用程序文件web.config
  • web.nlog位於同一目錄中web.config
  • NLog.config在應用程序的目錄
  • NLog.dll.nlogNLog.dll位於

共享配置文件可被置於任何地方ASP .NET過程可以讀取一個目錄,並且還有允許即時修改的autoReload="true"。在我們的例子中,它爲日誌消息定義了不同的targets,例如電子郵件,不同目錄中的日誌文件等。

+0

包含其他日誌文件是一個很好的功能。我會研究它,看看我能否實現某種「機器級」日誌配置。 – jcollum 2011-06-13 17:35:30

+0

@jcollum:確實很好,你也可以在文件名中使用變量,這增加了靈活性。 – 2011-06-13 17:38:49

+0

@jcollum:我通過一些澄清更新了答案。希望你覺得它有用。 – 2011-06-13 17:49:41

相關問題