Asp.net-Mvc

您應該在哪裡定期登錄 asp.net-mvc ?你應該使用ELMAH嗎?

  • July 11, 2011

當項目從我的 asp.net 記憶體中刪除時,我想開始記錄,我試圖弄清楚在哪里以及如何做到這一點。

我看到ELMAH被推薦用於應用程序範圍的異常處理日誌記錄系統,但它可以(並且應該)也可以(並且應該)用於像上面的範例那樣的正常日誌記錄工具?

我認為你使用 ELMAH 和 Log4Net(或 NLog)。兩者都使用將為您帶來最大的靈活性。我希望我現在可以詳細說明,但我想至少回應您,讓您知道使用 BOTH 是我所經歷的最佳解決方案,以及我所閱讀的其他人所做的。如果您需要解釋等,請告訴我。

在 Log4net 在生產中多次停止為我們記錄日誌之前,我們一直是純粹的 Log4Net 商店。為了避免這種情況發生,我們決定為我們的整個應用程序(即使是基本的日誌記錄)實現 ELMAH。我們對結果非常滿意,因為我們所有的日誌語句都出現在一個位置,並且沒有更多的文本文件可以遍歷(除非我們想要遍歷 XML 文件)。我們保留 Log4Net 進行了一次迭代,但最終發現它幾乎沒有用處,並已將其從我們的應用程序中完全刪除。

我可以理解為什麼您可能希望為一個站點使用兩種不同的日誌記錄框架,特別是因為 ELMAH 需要一個 HttpContext 才能充分發揮其潛力。但是,我們確實找到了一種在沒有 HttpContext 的情況下將異常傳遞給 ELMAH 的方法:

       /// <summary>
       /// Main logger method that will log an exception and/or a message
       /// </summary>
       /// <param name="exception">Exception to log</param>
       /// <param name="message">Message to log</param>
       private static void Log(Exception exception, string message)
       {
               Error elmahError = exception != null ? new Error(exception) : new Error();

               if (!string.IsNullOrWhiteSpace(message))
               {
                   elmahError.Message = message;
               }

               Elmah.ErrorLog.GetDefault(null).Log(elmahError);             
       }

然後在您的 web.config 中,您只需要指定applicationName

<elmah>
   <security allowRemoteAccess="1" />
   <errorLog name="ELMAHLogger" applicationName="xxx" type="Elmah.XmlFileErrorLog, Elmah" logPath="~/ELMAH_Production_Logs" />
 </elmah>

同樣,我認為 Log4Net 是一個很好的日誌框架,它為我們工作了很多年。我發現 ELMAH 在查找異常時更容易使用,並且上面的程式碼允許我們在應用程序中 HttpContext 可能不可用的任何地方使用它。

引用自:https://stackoverflow.com/questions/6645146