日志表包含错误时通知我

时间:2012-07-02 22:45:22

标签: sql sql-server sql-server-2008

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

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

1 个答案:

答案 0 :(得分:3)

您可以使用SQL Server Agent job(我假设您没有使用SQL Server Express)。您需要set up Database Mail。然后,您可以简单地安排一个每小时运行一次的作业:

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)