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