[Полезняшка] Расширение логирования. Управление оповещениями.

radv

Client
Регистрация
11.05.2015
Сообщения
360
Благодарностей
168
Баллы
43
Всем привет.

Очень часто при написании шаблонов на C# и удобстве отладки рекомендуется добавлять оповещения в лог, для визуального восприятия прохождения процесса выполнения проекта, чтобы сразу было видно на каком шаге возникает ошибка. В итоге информация в логе (количество выводимых оповещений) разрастается, и чтобы выводить в лог только нужные оповещения, я и написал предлагаемый обработчик, который можно использовать в любом из своих шаблонов.

Вы можете использовать не только стандартные типы оповещений (Информация, Предупреждение, Ошибка), но и добавить к ним уровни приоритета по выводу информации в лог.

Через входные настройки или через код можете сами задавать уровень приоритета.

Кроме уровня приоритета, можно задавать настройки надо ли сохранять информацию из лога в отдельный файл, и надо ли отправлять оповещение в телеграм (например, при ошибке или по какому-то другому условию).

Покажу на примере для большей наглядности.

Стандартные оповещения выглядят так.

C#:
project.SendInfoToLog("Текст Инфо", true);
project.SendWarningToLog("Текст предупреждения", true);
project.SendErrorToLog("Текст ошибки", true);
Вы можете изменить показывать или нет оповещение в ZennoPoster, при этом в ProjectMaker оповещения будут показываться всегда.

Теперь посмотрите, как могут выглядеть оповещения с дополнительными настройками.
C#:
myLog.SendInfo("Информация", "info", 3, true, true);

myLog.SendInfo("Предупреждение", "warning", 5, true, true);

myLog.SendInfo("Ошибка без остановки", "error", 3, true, true);
Вроде изменения не большие, но тут указаны все параметры (включая не обязательные)

В сокращенном варианте, для типа информации можно написать так:

C#:
myLog.SendInfo("Информация");
это практически полный аналог записи

C#:
project.SendInfoToLog("Текст Инфо");
А теперь представьте, если у Вас много таких оповещений, но часть из них нужна только для большей информативности, и некоторые из них вы просто хотели бы отключить или сохранять в файл или отправлять в телеграм. В этом случае можно использовать другие параметры (их названия и количество, можете изменять самостоятельно.)

Например:

При добавлении оповещений проекта, Вы решаете, что у Вас будет 3 уровня (или сколько хотите) с разделением их по важности. 1 – важная информация (по умолчанию), 2 – дополнительная менее важная информация, 3 – более подробная информация (например, если вы описываете выполнение каждого шага, и нужна отладочная информация с значениями переменных или какими-то еще параметрами)

Тогда код оповещения может быть таким:
C#:
myLog.SendInfo("Инфо по умолчанию", "info", 1); или myLog.SendInfo("Информация");

myLog.SendInfo("Информация дополнительно", "info", 2);

myLog.SendInfo("Информация для отладки", "info", 3);
и если Вы через настройки уровня оповещений зададите уровень 2, то сообщения с уровнем 3 не будут показываться в логе, но при этом в файл с логом могут сохранятся файлы с любым уровнем лога, чтобы его можно было просмотреть при необходимости и быстрее найти нужное место, где происходит ошибка или неверное выполнение задачи.

Дополнительные типы оповещений, которые можно создать на основе трех стандартных.
C#:
myLog.SendInfo("TRACE", "trace", 6, true, true);

myLog.SendInfo("DEBUG", "debug", 3, true, true);

myLog.SendInfo("Fatal Ошибка с остановкой", "fatal", 6, true, true);
Для оповещений об ошибке можно сделать дополнительный тип “fatal”, зачем это нужно? Просто не все оповещения типа “error” могут быть критическими для выполнения проекта и можно продолжать выполнение дальше (например, повторить выполнение в цикле или если действие не обязательное), а если после такой ошибки дальнейшее выполнение бессмысленно, то можно просто остановить проект с выводом исключения и подробной информацией об ошибке.

Используя информацию из других статей на форуме, можно подключить отправку критических ошибок или информацию о ходе выполнения проекта себе в телеграмм, чтобы оперативно отреагировать в нужный момент.

Так же сокращается количество кода. Один раз написать в нужный код обработки в методе из общего кода и одной строчкой вызова оповещения будут выполняться все нужные действия, в том числе сохранение в файл и т.п.

Код в шаблоне с комментариями, для лучшего понимания.
 
Категория
Полезно

Вложения

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование:

Master4eg

Client
Регистрация
06.04.2016
Сообщения
253
Благодарностей
43
Баллы
28
и если Вы через настройки уровня оповещений зададите уровень 2, то сообщения с уровнем 3 не будут показываться в логе, но при этом в файл с логом могут сохранятся файлы с любым уровнем лога, чтобы его можно было просмотреть при необходимости и быстрее найти нужное место, где происходит ошибка или неверное выполнение задачи.
Хм, интересное решение, как я сам раньше не догадался до такого)
 

radv

Client
Регистрация
11.05.2015
Сообщения
360
Благодарностей
168
Баллы
43
Хм, интересное решение, как я сам раньше не догадался до такого)
ну я тоже не сразу догадался, так сделать. Все с опытом приходит, и если возникает потребность сделать, что то удобнее. :-)
 

Asmus003

Client
Регистрация
25.03.2018
Сообщения
54
Благодарностей
14
Баллы
8
Выглядит очень круто, на днях обязательно опробую. Спасибо большое, пока что это лучшее для меня на этом конкурсе.
 

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
196
Благодарностей
65
Баллы
28
можно использовать в любом из своих шаблонов.

правильно понимаю, что если с С# не работаю и со словами "обработчик" не знаком - в свои шаблоны не добавить?
 

radv

Client
Регистрация
11.05.2015
Сообщения
360
Благодарностей
168
Баллы
43
правильно понимаю, что если с С# не работаю и со словами "обработчик" не знаком - в свои шаблоны не добавить?
Можно использовать в кубиках C#. Для использования готового кода, больших знаний C# не нужно, Сначала можете в моем шаблоне попрактиковаться и добавить несколько других разных кубиков, только для оповещений нужно будет добавлять кубик C# с кодом из примера, вместо стандартного кубика с оповещением. Такая замена кубика на кубик, может снизить удобство использования кода и создания проектов, будет расти количество кубиков. При написании проекта на кубиках, отладка делается проще, всегда видно кубик на котором произошла остановка по ошибке, а вот при написании через C# поможет в удобстве при отладке. Если захотите перенести все в свой проект/шаблон, то переносите код из блоков Общий код и ссылки Using, ну и код из кубика C#.
 
Регистрация
12.07.2014
Сообщения
345
Благодарностей
123
Баллы
43
:bo::ay: класс. не хватало мне такого
 

Gefest

Client
Регистрация
30.04.2016
Сообщения
51
Благодарностей
3
Баллы
8
Скринов бы добавил в чем изменения
Шаблон установить не могу, а с телефона не понятно вообще о чем речь) Что то где то поменялось, но показывать конечно же не буду)
 

radv

Client
Регистрация
11.05.2015
Сообщения
360
Благодарностей
168
Баллы
43
Скринов бы добавил в чем изменения
Шаблон установить не могу, а с телефона не понятно вообще о чем речь)
Какой скрин Вам нужен? Изменения только в том, что сообщение или показывается или нет в зависимости от его уровня. По умолчанию в ProjectMaker показываются все сообщения лога. Используя уровень лога, можно показывать в логе ProjectMaker/ZennoPoster только нужные сообщения, а остальные записывать в файл с логом или использовать только при отладке проекта, для большей информативности.
Какие сложности с открытием шаблона в ProjectMaker? Какая у Вас версия ZennoPoster? Выдает какие то ошибки при открытии шаблона? В шаблоне код прокомментирован и при запуске можете увидеть все отличия.
 
Последнее редактирование:

Vavildi

Client
Регистрация
29.02.2016
Сообщения
172
Благодарностей
94
Баллы
28
на 5.31 не запустился
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)