如何删除Elmah在服务器上生成的日志文件?
Elmah中是否有可用于删除日志文件的设置?我更愿意指定一些标准(例如,超过30天的日志文件)。
或者我应该为此编写自己的代码?
答案 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索引视图的图像:
如果有人需要代码作为例子,我很乐意发送它。
我的机制可以很容易地修改,以便在需要时(按日期,按状态代码等等)提供按标准选择性删除的机制。
我的回答是,您可以自己提供删除功能,而不是分叉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文件。