识别记录的错误的逻辑

时间:2018-09-10 16:23:08

标签: batch-file windows-10

如何检查Win 10中记录到文件的特定文本?有一个SAS守护程序偶尔会失败,这时会将消息记录到日志文件(C:\ SAS \​​ logs \ daemon_error.log)。仅在发生错误时才记录该消息(带有时间戳)。我想编写一个程序(并计划每15分钟运行一次),该程序将检查自从识别出上一个错误以来是否发生了任何错误消息。例如如果最后一次错误是在7月15日记录的,则文件看起来应该像这样:

07-15-2018 13:21:42 : Incorrect parameters

现在,如果今天再次记录了一些错误,它将看起来如下所示,此时脚本应触发并识别该错误并将电子邮件发送给目标收件人列表。我认为需要一种机制来存储识别到错误时的最后一个时间戳,以便它仅标识在最后一个错误之后记录的错误。

07-15-2018 13:21:42 : Incorrect parameters
09-10-2018 04:32:09 : Temp directory full

如何通过批处理文件或任何Windows事件来完成此操作。我主要在Unix上工作,所以对Win系统的了解不多。谁能帮忙吗? 谢谢

1 个答案:

答案 0 :(得分:0)

当我对您的理解正确时,您只想检查时间戳记就可以知道自从上次检查以来是否存在新错误,但不一定需要知道哪个错误。为此,我建议使用“存档属性”(Windows在每次对该文件的写访问权限时都设置此属性)

@echo off
:loop
timeout 900
dir /aa "C:\SAS\logs\daemon_error.log" >nul 2>&1 || goto :loop
echo The file was changed!
attrib -a "C:\SAS\logs\daemon_error.log"
goto :loop

在未设置“存档”属性(dir)(或文件不存在)的情况下,/aa命令将找不到该文件,然后|| goto :loop将跳至{ {1}}标签。
:loop只会丢弃>nul 2>&1命令的任何输出-我们不需要它,只是错误级别)
如果找到了文件(设置了Archive属性,那么我们知道有写访问权限),代码将继续。将dir命令替换为用于写电子邮件的命令(关于SO的问题/解答有几个)。
echo取消设置“存档”属性。

注意:我会设置一个计划的任务,而不是循环,但是请继续进行循环进行故障排除,直到您确定它可以按预期工作为止。