Elmah日志文件删除,手动还是有设置?

时间:2010-12-18 18:41:10

标签: asp.net-mvc elmah

如何删除Elmah在服务器上生成的日志文件?

Elmah中是否有可用于删除日志文件的设置?我更愿意指定一些标准(例如,超过30天的日志文件)。

或者我应该为此编写自己的代码?

4 个答案:

答案 0 :(得分:26)

您可以设置最大日志条目数,但是没有用于清除早于给定日期的日志的本机功能。不过,这是一个很好的功能要求!

如果要将错误日志存储在内存中,默认情况下存储的最大数量为500,这不需要其他配置。或者,您可以使用size关键字定义号码:

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

对于需要密切管理资源的内存或基于XML的日志记录,设置固定大小显然更为重要。您可以为任何日志类型定义固定大小。

答案 1 :(得分:1)

为了回应Phil Wheeler上面提到的内容,在我在Mvc4中进行的当前项目中,我们有一个名为SiteAdmin的Mvc区域。该区域将负责所有网站管理职责,包括Elmah。

为了克服缺少删除功能,我实现了一个删除Elmah中所有当前日志条目的函数(我们使用的是基于XML的版本)。

以下是SiteAdmin索引视图的图像:

enter image description here

  • 查看错误日志 - 在新窗口中打开Elmah UI。
  • 清除错误日志 - 显示确认弹出窗口,然后在用户确认时删除所有条目。

如果有人需要代码作为例子,我很乐意发送它。

我的机制可以很容易地修改,以便在需要时(按日期,按状态代码等等)提供按标准选择性删除的机制。

我的回答是,您可以自己提供删除功能,而不是分叉Elmah项目的开源代码。

答案 2 :(得分:1)

此SQL脚本删除早于最新“size”行的行:

declare @size INTEGER = 50;
declare @countno INTEGER;
SELECT @countno = count([ErrorId])  FROM [dbo].[ELMAH_Error]
/*
SELECT TOP (@countno-@size)
       [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 (@countno-@size)
               [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
*/

答案 3 :(得分:0)

至少在MVC项目中,您可以转到App_Data / Elmah.Errors目录以删除要删除的错误XML文件。