2010-12-18 57 views

回答

24

您可以設置日誌條目的最大數量,但是不存在用於清除日期早於給定日期的日誌的本機函數。雖然這是一個很好的功能要求!

如果您將錯誤日誌存儲在內存中,默認情況下存儲的最大數量爲500,這不需要額外的配置。另外,您也可以使用關鍵字size定義數量:

<elmah> 
    <errorLog type="Elmah.MemoryErrorLog, Elmah" size="50" /> 
</elmah> 

設置一個固定大小顯然是在內存中或基於XML的日誌記錄,其中資源需要嚴格的管理更重要。不過,您可以爲任何日誌類型定義固定大小。

+0

這無疑是一個ELMAH區域就是完全缺乏,雖然它已被要求多次。不應該很難允許刪除單個日誌條目以及清除所有的功能。不幸的是,你自己的功能。 – 2012-04-02 15:16:13

+7

這是一個開源項目。如果您有時間和傾向,請分解代碼並添加該功能。 – 2012-04-02 18:10:02

+1

風險必須實現或合併到您的分叉代碼的變化?不用,謝謝兄弟。這是任何日誌工具IMO的基本最小功能。它應該包含在項目中,並且自該項目實現以來一直被要求。 – 2012-04-02 18:14:59

2

爲了迴應Phil Wheeler在上面提到的問題,在Mvc4的一個當前項目中,我們有一個叫做SiteAdmin的Mvc區域。該地區將負責所有現場管理工作,包括Elmah。

爲了克服缺乏刪除功能,我實現了刪除Elmah中所有當前日誌條目的功能(我們使用基於XML的版本)。

這裏是SiteAdmin索引視圖的圖像:

enter image description here

  • 查看錯誤日誌 - 打開ELMAH UI中的新窗口。
  • 清除錯誤日誌 - 顯示確認彈出窗口,然後在用戶確認後刪除所有條目。

如果任何人需要代碼作爲例子,我很樂意發送它。

我的機制很容易修改,以便根據需要按標準提供選擇性刪除機制(按日期,按狀態代碼等)。

我的答案在這裏的一點是,你可以自己提供刪除功能,而不是分開Elmah項目的開源代碼。

+0

不再使用基於XML的版本,而是選擇使用SQLServer。 – 2013-02-11 21:25:19

+0

你是如何從Elmah設置獲取日誌文件夾路徑的? – Rumplin 2014-02-25 08:37:16

+0

這段代碼是否終結於公衆可見的地方?主旨或github? – 2015-02-11 15:00:51

1

至少在MVC項目中,您可以轉至App_Data/Elmah.Errors目錄以刪除要刪除的錯誤XML文件。

1

該SQL腳本刪除比被最新的「大小」行年長的行:

declare @size INTEGER = 50; 
declare @countno INTEGER; 
SELECT @countno = count([ErrorId]) FROM [dbo].[ELMAH_Error] 
/* 
SELECT TOP (@[email protected]) 
     [ErrorId] 
     ,[TimeUtc] 
     ,[Sequence] 
    FROM [dbo].[ELMAH_Error] 
    order by [Sequence] asc 
GO 
*/ 
DELETE FROM [dbo].[ELMAH_Error] 
WHERE [ErrorId] IN (
    SELECT t.[ErrorId] FROM (
     SELECT TOP (@[email protected]) 
       [ErrorId] 
       ,[TimeUtc] 
       ,[Sequence] 
      FROM [dbo].[ELMAH_Error] 
      order by [Sequence] asc 
    ) t 
    ) 
GO 


/* 
-- Print remaining rows 
SELECT * FROM [dbo].[ELMAH_Error] 
order by [Sequence] desc 
*/