2011-03-01 69 views
4

在我的作品中,我們製作的網站像他們走出去的方式(即大量每年網站)你如何集中ELMAH記錄

我想所有的這些安裝ELMAH作爲公司的做法,然後登錄我們的開發人員可以集中觀看所有內容該過程必須非常簡單,否則其使用不會起飛。

我正在考慮建立一箇中央的Google閱讀器帳戶,並將ELMAH安裝的所有RSS源連接到它。

我擔心Google說他們每小時只檢查一次,這意味着如果您使用ELMAH的「內存」存儲,那麼在應用程序池重新啓動時,錯誤可能會丟失。

電子郵件是相當不錯的,但如果每個人都開始接受ELMAH錯誤消息,他們將開始忽略它們 - 也許我可以設置一個額外的交換郵箱只是爲了讓這東西分開?

您的想法將不勝感激

(PS這可以被認爲是主觀的 - 但我認爲,有人可能有中一些主觀的答案的答案,使之成爲一個有效的問題)

回答

7

通過對Elmah源代碼進行一些更改,您可以讓所有網站都寫入同一個數據庫。然後,您可以配置一個主控程序,以便將所有例外情況與投放它的應用程序一起顯示。

埃裏克國王展示瞭如何在這篇博客http://blog.devadept.com/2010/02/using-elmah-with-multiple-applications.html

總結:

創建一個名爲ELMAH_GetErrorsXML_Master和ELMAH_GetErrorXML_Master沒有的applicationName參數數據庫兩個額外的存儲過程。

然後根據現有的'SQLErrorLog.cs'類創建一個SQLMasterErrorLog類。在此編輯GetErrorXml()和GetErrorsXML()方法來調用新的存儲過程

public static SqlCommand GetErrorXml(string appName, Guid id) 
{ 
    SqlCommand command = new SqlCommand("ELMAH_GetErrorXml_Master"); 
    command.CommandType = CommandType.StoredProcedure; 

    SqlParameterCollection parameters = command.Parameters; 
    parameters.Add("@ErrorId", SqlDbType.UniqueIdentifier).Value = id; 

    return command; 
} 

public static SqlCommand GetErrorsXml(string appName, int pageIndex, int pageSize) 
{ 
    SqlCommand command = new SqlCommand("ELMAH_GetErrorsXml_Master"); 
    command.CommandType = CommandType.StoredProcedure; 

    SqlParameterCollection parameters = command.Parameters; 

    parameters.Add("@PageIndex", SqlDbType.Int).Value = pageIndex; 
    parameters.Add("@PageSize", SqlDbType.Int).Value = pageSize; 
    parameters.Add("@TotalCount", SqlDbType.Int).Direction = ParameterDirection.Output; 

    return command; 
} 

變化在ErrorLogPage類RendorErrors()方法的應用程序名稱顯示在日誌查看器表中的一個額外的列。

添加以下表頭

headRow.Cells.Add(FormatCell(new TableHeaderCell(), "Host", "host-col")); 
headRow.Cells.Add(FormatCell(new TableHeaderCell(), "App", "app-col")); 

而且在創建childrows

bodyRow.Cells.Add(FormatCell(new TableCell(), error.HostName, "host-col")); 
bodyRow.Cells.Add(FormatCell(new TableCell(), error.ApplicationName, "app-col")); 

下面的for循環現在,所有你需要的是一個空的網站,有ELMAH配置。而不是正常的SqlErrorLog使用以下

<errorLog type="Elmah.SqlMasterErrorLog, Elmah" connectionStringName="elmah"/> 
+1

這很好,但斷開連接就是我們想要的 - 我們沒有將所有網站都放在同一個虛擬主機中,因此不能將所有內容寫入單個數據庫,因爲它不能集中在一起 - 因此我的想法與谷歌閱讀器 – Doug 2011-03-11 00:15:04

+2

在這種情況下,我會創建一個基於接受ftp信息的XmlFileErrorLog的類。您可以將所有xml文件發送到本地網絡中的單個服務器,並使用上面發佈的相同渲染更改。 – 2011-03-11 09:14:49

1

我用ftp方法轉移的所有錯誤XML(網站,B,C ...)的收集所有網站的錯誤XML(日誌網站)。

Global.asax Application_Start

添加ElmahErrorLogCustomize任務每10分鐘到所有的XML所有XML傳輸到日誌網站,轉讓後的網站(A,B,C ...),並在網站上刪除這些記錄(A,B,C ...)