Логика для выявления ошибок в журнале - PullRequest
0 голосов
/ 10 сентября 2018

Как я могу проверить наличие определенного текста, записанного в файл в Win 10? Существует демон SAS, который иногда дает сбой и в этот момент записывает сообщение в файл журнала (C: \ SAS \ ​​logs \ daemon_error.log). Сообщение регистрируется (с отметкой времени) только при возникновении ошибки. Я хочу написать программу (и планировать запуск каждые 15 минут), которая будет проверять возникновение любого сообщения об ошибке с момента обнаружения последней ошибки. Например, если бы последняя ошибка была зарегистрирована 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. Я не очень разбираюсь в системах Win, так как в основном работал над Unix. Может кто-нибудь, пожалуйста, помогите? Спасибо

1 Ответ

0 голосов
/ 11 сентября 2018

Когда я вас правильно понял, вы хотите проверить отметку времени, чтобы только знать, есть ли новые ошибки с момента последней проверки, но не обязательно знать, какие ошибки. Для этого я предлагаю использовать «Атрибут архива» (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 не найдет файл, если атрибут Archive не установлен (/aa) (или файл не существует), а затем || goto :loop перейдет к метке :loop.
>nul 2>&1 просто отбрасывает любой вывод команды dir - нам это не нужно, только уровень ошибки)
Если файл был найден (атрибут Archive установлен, как мы знаем, был доступ для записи), код продолжается. Замените команду echo на команду для написания электронного письма (есть несколько вопросов / ответов по этому поводу в SO).
attrib -a отменяет атрибут Archive.

Примечание. Вместо цикла я бы настроил запланированное задание, но оставался в цикле для устранения неполадок, пока вы не уверены, что он работает как задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...