我正在使用log4net
,并希望设置一个进程,以便在将记录写入Log
表时通知我。我希望它每小时左右运行一次。我可能会使用这个查询:
SELECT * FROM Log
WHERE Level = 'ERROR'
AND Datediff(hh,[Date],getdate()) < 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)