- Регистрация
- 01.10.2015
- Сообщения
- 227
- Благодарностей
- 927
- Баллы
- 93
Приветствую всех!
В прошлых конкурсах, как и просто в обсуждениях на форуме, многократно затрагивалась тема логирования в шаблонах. Однако, по моим ощущениям, в более-менее универсальное решение все вещи по этой теме всё ещё не сведены. Например, в одном теме про сохранение скрина/исходника/DOM активной вкладки и общей инфы об ошибке от ZP, в другой – как отправлять логи в TG, в ещё одной – как расширить логирование своим кодом и т.д. все отдельные аспекты плюс-минус по отдельности.
Поэтому, думаю, во-первых, хорошо бы иметь «скомпилированную» систему логирования из всех этих вещей (в разумных пределах, конечно, прям всё-всё охватить в рамках небольшой статьи не получится). Во-вторых – сделать её удобной как для шаблонов в коде/частично в коде, так и для шаблонов на кубиках. В последнем случае нам поможет функционал плагинов для ZP.
Соответственно, предлагаю решить данную задачу, и так как это у нас статья – пройтись по созданию такого расширенного логирования, как такую систему можно соорудить для своих шаблонов ZennoPoster. Ну и помимо сведения, конечно, добавим свои дополнения.
Для использования кода мы создадим свою библиотечку, которую можно будет подключать к свои шаблонам.
Для использования в шаблонах на кубиках создадим плагин, который будет основан на этой самом библиотечке.
Немного заспойлерим плагины в виде картинок, а то дальше у нас всё равно будет много текста и кода)
Начнём с того, как у нас вообще работают логи, как устроено логирование простыми словами. По сути, это вывод какой-либо информации (текста о текущем действии шаблона, скриншота вкладки с проблемой и т.д.) куда-либо (в лог ZP, в файл, на облако и т.д.).
Как следствие, для создания единой расширенной системы логирования для начала надо определить, что вообще мы можем сохранять как данные лога, и куда эти данные сохранять/отправлять.
Что логировать
Текстовая строка
Тип данных: текст, однострочный или многострочный
Особенности: под текстовой строкой учитываем также вариации и с переменными проекта и окружения – например, логирование URL активной вкладки.
Исходник страницы (source)
Тип данных: текстовый файл
Особенности: можно сохранять как у страницы активной вкладки, так и у всех, если их несколько.
DOM страницы
Тип данных: текстовый файл
Особенности: можно сохранять как у страницы активной вкладки, так и у всех, если их несколько.
Скриншот страницы
Тип данных: изображение
Особенности: можно сохранять как у страницы активной вкладки, так и у всех, если их несколько.
Переменные проекта и их значения
Тип данных: текстовый файл
Данные трафика (запросы и их параметры)
Тип данных: текстовый файл
Данные о последней ошибке
Тип данных: многострочный текст, текстовый файл
Особенности: для шаблонов в коде в целом не особо актуально.
Массивный текст/иные данные
Тип данных: файл
Особенности: любой массивный текст (например, из переменной) или иные данные (нестандартных типов в том числе), которые надо записывать в файл.
Куда логировать
Сообщение в PM
(например, если это исключительно сообщение для дебага в PM)
Что можно: текстовая строка
Сообщение в ZennoPoster
(обычный текстовый лог в интерфейсе ZennoPoster)
Что можно: текстовая строка
Сохранение в файл
Что можно: данные всех типов.
Отправка в ТГ / почту / whatsapp
Что можно: всё (текстовую строку как текстовое сообщение, файлы как файлы, скриншот как изображение)
Сообщение в уведомления ZP
Что можно: текстовая строка
Примечание: редко используемая вещь, но может быть полезна для привлечения внимания человека, который пользуется тем же компьютером, на котором выполняется шаблон.
Сообщение в MsgBox (WinForms)
Что можно: текстовая строка, изображение
Примечание: редко используемая вещь, но может быть полезна для привлечения внимания человека, который пользуется тем же компьютером, на котором выполняется шаблон.
Теперь, когда мы прикинули, что и куда мы можем сохранять/отправлять, можно подумать, как эти вещи у нас будут комбинироваться между собой.
Комбинации будут зависеть в большей мере от типа сообщения лога. По умолчанию Zenno предоставляет нам 3 типа сообщения – информационное сообщение, предупреждение и ошибка. К этим типам можно сразу добавить по меньшей мере ещё пару – критическая ошибка и сообщения дебага.
Давайте подумаем над отличительными чертами каждого вида сообщения и сразу попробуем набросать дефолтные методы для них (т.е. с набором дефолтных параметров что и куда слать)
1. Информационное.
Сообщение с синей пиктограммкой в обычном логе ZP. Используется в основном как сообщение в лог о текущем действии или этапе работы шаблона.
В виде такого сообщения имеет смысл выводить только «текстовую строку».
Куда выводить – в лог ZP, в общий файл лога по шаблону или по текущему профилю (если сохраняем логи в файл). И, собственно, всё – в другие места имеет смысл выводить такие сообщения, если только мы в целом вывод общего лога куда-то хотим вынести за пределы ZP.
2. Предупреждение.
Сообщение с жёлтой пиктограммкой в обычном логе ZP. Используется в основном как сообщение в лог о внештатной ситуации или необычной (но известной) проблеме, которая при этом не является ошибкой, на которую однозначно надо реагировать.
Вид сообщения – тоже тут в большинстве случаев только «текстовая строка», но с дополнительными данными (например, URL активной вкладки для браузерного шаблона), значениями ключевых переменных.
Куда выводить – как правило тоже просто лог ZP или файловый. Также можно использовать уведомления ZP и MsgBox, чтобы привлечь внимание человека, который пользуется тем же компьютером, на котором выполняется шаблон.
3. Ошибка.
Сообщение с красной пиктограммкой в обычном логе ZP. Используется в основном для обозначения важных ошибок, в том числе и критических. В нашем случае предлагаю остановиться на просто ошибках, а критические вынести в отдельную категорию.
Вид сообщения – практически всегда уже не только «текстовая строка», но и ряд других. Если шаблон браузерный – имеет смысл сохранять скриншот, исходник страницы, возможно данные трафика. Если шаблон безбраузерный – данные трафика и переменные, которые используются для сохранения ответов от сервера.
Куда выводить – в файлы, плюс текстовую строку в обычный лог. Если для шаблона нетипично частое появления таких ошибок – можно добавить сюда же отсылку в мессенджеры (тот же TG) как «текстовую строку», так и файлы. Так же, как и с предупреждением, дополнительно можно использовать уведомления ZP и MsgBox, чтобы привлечь внимание человека, который пользуется тем же компьютером, на котором выполняется шаблон.
4. Фатальная ошибка.
Под этой ошибкой предлагаю понимать ту, после которой по каким-либо причинам дальнейшее выполнение шаблона является невозможным. Логично, что как минимум на BadEnd «вывод» фатальной ошибки должен висеть.
Соответственно, при такой ошибке надо сохранять всё, что только можно (все виды данных, описанных выше).
Выводить данные в файлы и отправлять уведомление (а то и данные тоже) в мессенджеры или ещё куда, т.к. в таких ситуация нередко необходимо оперативное вмешательство.
5. Сообщение отладки.
Во всём аналог обычных информационных сообщений, только разбросаны там, где нужно дополнительная информация создателю шаблона для отладки. Вывод данных либо по «галочке» в лог ZP, либо, например, в отдельный файл с логами отладки.
Как мы видим, из 5 типов у нас получается пара условно простых с самыми базовыми видом и выводом (инфо и отладочные сообщения), 1 с возможными комбинациями (предупреждение) и 2 практически с гарантированными комбинациями, т.е. типы с комплексным устройством (ошибка и фатальная ошибка).
На всякий случай отмечу, что эти дефолтные методы носят приблизительный характер.
Самостоятельно вы можете как отредатикровать их в прикрепленных исходниках библиотеки, так и создать внутри них свои вариации для себя.
Таким же образом дела и с прикреплённым плагином - вы можете его размножить, сделать на каждый свои дефолтные настройки и свои иконки.
Далее также заодно отмечу (раз уж речь зашла об иконках), что на 5 типов сообщений у нас 3 иконки для лога в ZP, но с версии ZP 7.2.1.0 появилась возможность «раскрашивать» сообщения разными цветами. Мы пока не будем пользоваться этой особенностью (достаточно недавняя обнова в ZP, и далеко не у всех скорее всего установлены последние версии). Однако, для файловых логов (а также просто во внешние источники) можно использовать префиксы для сообщений. К примеру:
Их, к слову, уже можно было заметить в набросках кода выше.
Условно общую информацию мы обозначили о логировании, теперь можно приступать к реализации – написанию всего кода проекта.
Точнее, наполнению всех методов, которые были использованы в коде выше, и написанию дополнительных служебных.
Честно говоря, думал пройтись по всем кускам кода с пояснениями в текстовом виде, как обычно это делается в статья, но строчек кода больно уж много в библиотечке получилось.
И, раз уж есть возможность добавлять к статье видео - пройдусь по коду прямо в нём Ну и по плагину на основе него тоже.
Все исходники, а также готовые к использованию в своих шаблонах библиотеку и плагин - прикрепляю к статье.
Всем удачи
В прошлых конкурсах, как и просто в обсуждениях на форуме, многократно затрагивалась тема логирования в шаблонах. Однако, по моим ощущениям, в более-менее универсальное решение все вещи по этой теме всё ещё не сведены. Например, в одном теме про сохранение скрина/исходника/DOM активной вкладки и общей инфы об ошибке от ZP, в другой – как отправлять логи в TG, в ещё одной – как расширить логирование своим кодом и т.д. все отдельные аспекты плюс-минус по отдельности.
Поэтому, думаю, во-первых, хорошо бы иметь «скомпилированную» систему логирования из всех этих вещей (в разумных пределах, конечно, прям всё-всё охватить в рамках небольшой статьи не получится). Во-вторых – сделать её удобной как для шаблонов в коде/частично в коде, так и для шаблонов на кубиках. В последнем случае нам поможет функционал плагинов для ZP.
Соответственно, предлагаю решить данную задачу, и так как это у нас статья – пройтись по созданию такого расширенного логирования, как такую систему можно соорудить для своих шаблонов ZennoPoster. Ну и помимо сведения, конечно, добавим свои дополнения.
Для использования кода мы создадим свою библиотечку, которую можно будет подключать к свои шаблонам.
Для использования в шаблонах на кубиках создадим плагин, который будет основан на этой самом библиотечке.
Немного заспойлерим плагины в виде картинок, а то дальше у нас всё равно будет много текста и кода)
Начнём с того, как у нас вообще работают логи, как устроено логирование простыми словами. По сути, это вывод какой-либо информации (текста о текущем действии шаблона, скриншота вкладки с проблемой и т.д.) куда-либо (в лог ZP, в файл, на облако и т.д.).
Как следствие, для создания единой расширенной системы логирования для начала надо определить, что вообще мы можем сохранять как данные лога, и куда эти данные сохранять/отправлять.
Что логировать
Текстовая строка
Тип данных: текст, однострочный или многострочный
Особенности: под текстовой строкой учитываем также вариации и с переменными проекта и окружения – например, логирование URL активной вкладки.
Исходник страницы (source)
Тип данных: текстовый файл
Особенности: можно сохранять как у страницы активной вкладки, так и у всех, если их несколько.
DOM страницы
Тип данных: текстовый файл
Особенности: можно сохранять как у страницы активной вкладки, так и у всех, если их несколько.
Скриншот страницы
Тип данных: изображение
Особенности: можно сохранять как у страницы активной вкладки, так и у всех, если их несколько.
Переменные проекта и их значения
Тип данных: текстовый файл
Данные трафика (запросы и их параметры)
Тип данных: текстовый файл
Данные о последней ошибке
Тип данных: многострочный текст, текстовый файл
Особенности: для шаблонов в коде в целом не особо актуально.
Массивный текст/иные данные
Тип данных: файл
Особенности: любой массивный текст (например, из переменной) или иные данные (нестандартных типов в том числе), которые надо записывать в файл.
Куда логировать
Сообщение в PM
(например, если это исключительно сообщение для дебага в PM)
Что можно: текстовая строка
Сообщение в ZennoPoster
(обычный текстовый лог в интерфейсе ZennoPoster)
Что можно: текстовая строка
Сохранение в файл
Что можно: данные всех типов.
Отправка в ТГ / почту / whatsapp
Что можно: всё (текстовую строку как текстовое сообщение, файлы как файлы, скриншот как изображение)
Сообщение в уведомления ZP
Что можно: текстовая строка
Примечание: редко используемая вещь, но может быть полезна для привлечения внимания человека, который пользуется тем же компьютером, на котором выполняется шаблон.
Сообщение в MsgBox (WinForms)
Что можно: текстовая строка, изображение
Примечание: редко используемая вещь, но может быть полезна для привлечения внимания человека, который пользуется тем же компьютером, на котором выполняется шаблон.
Теперь, когда мы прикинули, что и куда мы можем сохранять/отправлять, можно подумать, как эти вещи у нас будут комбинироваться между собой.
Комбинации будут зависеть в большей мере от типа сообщения лога. По умолчанию Zenno предоставляет нам 3 типа сообщения – информационное сообщение, предупреждение и ошибка. К этим типам можно сразу добавить по меньшей мере ещё пару – критическая ошибка и сообщения дебага.
Давайте подумаем над отличительными чертами каждого вида сообщения и сразу попробуем набросать дефолтные методы для них (т.е. с набором дефолтных параметров что и куда слать)
1. Информационное.
Сообщение с синей пиктограммкой в обычном логе ZP. Используется в основном как сообщение в лог о текущем действии или этапе работы шаблона.
В виде такого сообщения имеет смысл выводить только «текстовую строку».
Куда выводить – в лог ZP, в общий файл лога по шаблону или по текущему профилю (если сохраняем логи в файл). И, собственно, всё – в другие места имеет смысл выводить такие сообщения, если только мы в целом вывод общего лога куда-то хотим вынести за пределы ZP.
Пример дефолтного метода для информационного сообщения:
void SendDefInfo (string message)
{
// Отправка текстовой строки в лог ZP, если нужно
if (ShowLogInPM)
{
Project.SendInfoToLog(message, ShowLogInZP);
}
// Отправка текстовой строки в файловый лог ZP, если нужно
if (SaveLogInFile)
{
File.AppendAllText(GetFileLogPath(), GetFileLogMessage(message, "i"));
}
}
Сообщение с жёлтой пиктограммкой в обычном логе ZP. Используется в основном как сообщение в лог о внештатной ситуации или необычной (но известной) проблеме, которая при этом не является ошибкой, на которую однозначно надо реагировать.
Вид сообщения – тоже тут в большинстве случаев только «текстовая строка», но с дополнительными данными (например, URL активной вкладки для браузерного шаблона), значениями ключевых переменных.
Куда выводить – как правило тоже просто лог ZP или файловый. Также можно использовать уведомления ZP и MsgBox, чтобы привлечь внимание человека, который пользуется тем же компьютером, на котором выполняется шаблон.
Пример дефолтного метода для предупреждения:
void SendDefWarning (string message)
{
// Отправка текстовой строки в лог ZP, если нужно
if (ShowLogInPM)
{
Project.SendWarningToLog(message, ShowLogInZP);
}
// Отправка текстовой строки в файловый лог ZP, если нужно
if (SaveLogInFile)
{
File.AppendAllText(GetFileLogPath(), GetFileLogMessage(message, "!"));
}
// Показ уведомления ZP (черноё всплывающее окошко)
if (DisplayNotifZP)
{
DisplayNotificationZP(message);
}
}
Сообщение с красной пиктограммкой в обычном логе ZP. Используется в основном для обозначения важных ошибок, в том числе и критических. В нашем случае предлагаю остановиться на просто ошибках, а критические вынести в отдельную категорию.
Вид сообщения – практически всегда уже не только «текстовая строка», но и ряд других. Если шаблон браузерный – имеет смысл сохранять скриншот, исходник страницы, возможно данные трафика. Если шаблон безбраузерный – данные трафика и переменные, которые используются для сохранения ответов от сервера.
Куда выводить – в файлы, плюс текстовую строку в обычный лог. Если для шаблона нетипично частое появления таких ошибок – можно добавить сюда же отсылку в мессенджеры (тот же TG) как «текстовую строку», так и файлы. Так же, как и с предупреждением, дополнительно можно использовать уведомления ZP и MsgBox, чтобы привлечь внимание человека, который пользуется тем же компьютером, на котором выполняется шаблон.
Пример дефолтного метода для ошибки:
void SendDefError (string message)
{
string originMessage = message;
// Сохранение скриншота, исходника и DOM страницы
if (SaveTabDataInFiles)
{
string msgTabData = SaveTabData(FolderOfCurrentThreadLog);
message += Environment.NewLine + msgTabData;
}
// Сохранение данных трафика в файл
if (SaveTrafficInFile)
{
string msgTraffic = "Сохранили путь к файлу с данными трафика: " + SaveTraffic(FolderOfCurrentThreadLog);
message += Environment.NewLine + msgTraffic;
}
// Отправка в телеграм
if (TgNeedSend)
{
// Без уведомления ("тихая" отправка)
SendToTelegram(originMessage, TgSendFiles, true);
}
// Отправка на почту
if (EmailNeedSend)
{
SendToEmail(originMessage, EmailSendFiles);
}
// Отправка текстовой строки в лог ZP, если нужно
if (ShowLogInPM)
{
Project.SendErrorToLog(message, ShowLogInZP);
}
// Отправка текстовой строки в файловый лог ZP, если нужно
if (SaveLogInFile)
{
File.AppendAllText(GetFileLogPath(), GetFileLogMessage(message, "e"));
}
// Звуковое уведомление на рабочей машине
if (PlayWarnSound)
{
PlayWarningSound();
}
}
Под этой ошибкой предлагаю понимать ту, после которой по каким-либо причинам дальнейшее выполнение шаблона является невозможным. Логично, что как минимум на BadEnd «вывод» фатальной ошибки должен висеть.
Соответственно, при такой ошибке надо сохранять всё, что только можно (все виды данных, описанных выше).
Выводить данные в файлы и отправлять уведомление (а то и данные тоже) в мессенджеры или ещё куда, т.к. в таких ситуация нередко необходимо оперативное вмешательство.
Пример дефолтного метода для критической ошибки:
void SendDefFatal (string message)
{
string originMessage = message;
// Сохранение скриншота, исходника и DOM страницы
if (SaveTabDataInFiles)
{
string msgTabData = SaveTabData(FolderOfCurrentThreadLog);
message += Environment.NewLine + msgTabData;
}
// Сохранение данных трафика в файл
if (SaveTrafficInFile)
{
string msgTraffic = "Сохранили путь к файлу с данными трафика: " + SaveTraffic(FolderOfCurrentThreadLog);
message += Environment.NewLine + msgTraffic;
}
// Сохранение переменных проекта в файл
if (SaveVariablesInFile)
{
string msgVars = "Сохранили путь к файлу с переменными и их значениями: " + SaveVariables(FolderOfCurrentThreadLog);
message += Environment.NewLine + msgVars;
}
// Отправка в телеграм
if (TgNeedSend)
{
SendToTelegram(originMessage, TgSendFiles);
}
// Отправка на почту
if (EmailNeedSend)
{
SendToEmail(originMessage, EmailSendFiles);
}
// Отправка текстовой строки в лог ZP, если нужно
if (ShowLogInPM)
{
Project.SendErrorToLog(message, ShowLogInZP);
}
// Отправка текстовой строки в файловый лог ZP, если нужно
if (SaveLogInFile)
{
File.AppendAllText(GetFileLogPath(), GetFileLogMessage(message, "E"));
}
// Звуковое уведомление на рабочей машине
if (PlayWarnSound)
{
PlayWarningSound();
}
}
Во всём аналог обычных информационных сообщений, только разбросаны там, где нужно дополнительная информация создателю шаблона для отладки. Вывод данных либо по «галочке» в лог ZP, либо, например, в отдельный файл с логами отладки.
Пример дефолтного метода для сообщения отладки:
void SendDefDebug (string message)
{
// Отправка текстовой строки в лог ZP, если нужно
if (ShowDebugLogInZP)
{
Project.SendInfoToLog(message, ShowLogInZP);
}
// Отправка текстовой строки в файловый лог ZP, если нужно
if (SaveDebugLogInFile)
{
File.AppendAllText(GetFileLogPath(), GetFileLogMessage(message, "d"));
}
}
На всякий случай отмечу, что эти дефолтные методы носят приблизительный характер.
Самостоятельно вы можете как отредатикровать их в прикрепленных исходниках библиотеки, так и создать внутри них свои вариации для себя.
Таким же образом дела и с прикреплённым плагином - вы можете его размножить, сделать на каждый свои дефолтные настройки и свои иконки.
Далее также заодно отмечу (раз уж речь зашла об иконках), что на 5 типов сообщений у нас 3 иконки для лога в ZP, но с версии ZP 7.2.1.0 появилась возможность «раскрашивать» сообщения разными цветами. Мы пока не будем пользоваться этой особенностью (достаточно недавняя обнова в ZP, и далеко не у всех скорее всего установлены последние версии). Однако, для файловых логов (а также просто во внешние источники) можно использовать префиксы для сообщений. К примеру:
Код:
[i] – информационное сообщение.
[!] – предупреждение.
[x] – ошибка.
[X] – фатальная ошибка.
[d] – сообщение отладки.
Условно общую информацию мы обозначили о логировании, теперь можно приступать к реализации – написанию всего кода проекта.
Точнее, наполнению всех методов, которые были использованы в коде выше, и написанию дополнительных служебных.
Честно говоря, думал пройтись по всем кускам кода с пояснениями в текстовом виде, как обычно это делается в статья, но строчек кода больно уж много в библиотечке получилось.
И, раз уж есть возможность добавлять к статье видео - пройдусь по коду прямо в нём Ну и по плагину на основе него тоже.
Все исходники, а также готовые к использованию в своих шаблонах библиотеку и плагин - прикрепляю к статье.
Всем удачи
- Тема статьи
- Другое
- Номер конкурса статей
- Пятнадцатый конкурс статей
Вложения
-
302,3 КБ Просмотры: 284
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование: