0

我正在使用log4net并希望设置一个流程,以便在将记录写入Log表时通知我。我希望它每小时左右运行一次。我可能会使用这个查询:

SELECT * FROM Log 
WHERE Level = 'ERROR' 
AND Datediff(hh,[Date],getdate()) < 1 
4

1 回答 1

3

您可以使用SQL Server 代理作业(我假设您没有使用 SQL Server Express)。您将需要设置数据库邮件。然后你可以简单地安排一个每小时运行的作业,它说:

IF EXISTS 
(
  SELECT 1 FROM dbo.[Log] 
    WHERE Level = 'ERROR' 
    AND [Date] >= DATEADD(HOUR, -1, GETDATE())
)
BEGIN
    EXEC msdb.dbo.sp_send_dbmail ...
END

请注意,这门科学并不精确......如果作业在 8:00 后几秒钟开始,它可能会错过 7:00:01 发生的错误,如果你添加几秒钟的缓冲区,你可能会加倍-报告在 6:59:59.997 发生的错误。您可以考虑采取的措施来缓解这种情况,将您记录的最后一个错误存储在某处,然后您可以添加一个附加WHERE子句:

AND [Date] > (SELECT MAX(LastError) FROM dbo.LastErrorLog)
于 2012-07-02T22:49:31.983 回答