5 место Расширенные логи. Пишем систему логирования для своих шаблонов

LaGir

Client
Регистрация
01.10.2015
Сообщения
227
Благодарностей
927
Баллы
93
Приветствую всех!

В прошлых конкурсах, как и просто в обсуждениях на форуме, многократно затрагивалась тема логирования в шаблонах. Однако, по моим ощущениям, в более-менее универсальное решение все вещи по этой теме всё ещё не сведены. Например, в одном теме про сохранение скрина/исходника/DOM активной вкладки и общей инфы об ошибке от ZP, в другой – как отправлять логи в TG, в ещё одной – как расширить логирование своим кодом и т.д. все отдельные аспекты плюс-минус по отдельности.

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

Соответственно, предлагаю решить данную задачу, и так как это у нас статья – пройтись по созданию такого расширенного логирования, как такую систему можно соорудить для своих шаблонов ZennoPoster. Ну и помимо сведения, конечно, добавим свои дополнения.

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

Немного заспойлерим плагины в виде картинок, а то дальше у нас всё равно будет много текста и кода)

02.png



Начнём с того, как у нас вообще работают логи, как устроено логирование простыми словами. По сути, это вывод какой-либо информации (текста о текущем действии шаблона, скриншота вкладки с проблемой и т.д.) куда-либо (в лог 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"));
    }
}
2. Предупреждение.
Сообщение с жёлтой пиктограммкой в обычном логе 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);
    }
}
3. Ошибка.
Сообщение с красной пиктограммкой в обычном логе 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();
    }
}
4. Фатальная ошибка.
Под этой ошибкой предлагаю понимать ту, после которой по каким-либо причинам дальнейшее выполнение шаблона является невозможным. Логично, что как минимум на 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();
    }
}
5. Сообщение отладки.
Во всём аналог обычных информационных сообщений, только разбросаны там, где нужно дополнительная информация создателю шаблона для отладки. Вывод данных либо по «галочке» в лог ZP, либо, например, в отдельный файл с логами отладки.

Пример дефолтного метода для сообщения отладки:
void SendDefDebug (string message)
{
    // Отправка текстовой строки в лог ZP, если нужно
    if (ShowDebugLogInZP)
    {
        Project.SendInfoToLog(message, ShowLogInZP);
    }
    // Отправка текстовой строки в файловый лог ZP, если нужно
    if (SaveDebugLogInFile)
    {
        File.AppendAllText(GetFileLogPath(), GetFileLogMessage(message, "d"));
    }
}
Как мы видим, из 5 типов у нас получается пара условно простых с самыми базовыми видом и выводом (инфо и отладочные сообщения), 1 с возможными комбинациями (предупреждение) и 2 практически с гарантированными комбинациями, т.е. типы с комплексным устройством (ошибка и фатальная ошибка).
На всякий случай отмечу, что эти дефолтные методы носят приблизительный характер.
Самостоятельно вы можете как отредатикровать их в прикрепленных исходниках библиотеки, так и создать внутри них свои вариации для себя.
Таким же образом дела и с прикреплённым плагином - вы можете его размножить, сделать на каждый свои дефолтные настройки и свои иконки.

Далее также заодно отмечу (раз уж речь зашла об иконках), что на 5 типов сообщений у нас 3 иконки для лога в ZP, но с версии ZP 7.2.1.0 появилась возможность «раскрашивать» сообщения разными цветами. Мы пока не будем пользоваться этой особенностью (достаточно недавняя обнова в ZP, и далеко не у всех скорее всего установлены последние версии). Однако, для файловых логов (а также просто во внешние источники) можно использовать префиксы для сообщений. К примеру:
Код:
[i] – информационное сообщение.
[!] – предупреждение.
[x] – ошибка.
[X] – фатальная ошибка.
[d] – сообщение отладки.
Их, к слову, уже можно было заметить в набросках кода выше.

Условно общую информацию мы обозначили о логировании, теперь можно приступать к реализации – написанию всего кода проекта.
Точнее, наполнению всех методов, которые были использованы в коде выше, и написанию дополнительных служебных.
Честно говоря, думал пройтись по всем кускам кода с пояснениями в текстовом виде, как обычно это делается в статья, но строчек кода больно уж много в библиотечке получилось.
И, раз уж есть возможность добавлять к статье видео - пройдусь по коду прямо в нём :-) Ну и по плагину на основе него тоже.


Все исходники, а также готовые к использованию в своих шаблонах библиотеку и плагин - прикрепляю к статье.
Всем удачи :-)
 
Тема статьи
Другое
Номер конкурса статей
Пятнадцатый конкурс статей

Вложения

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

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

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

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 453
Баллы
113
Просто замечательная идея и пример! Спасибо!
 
  • Спасибо
Реакции: LaGir

Juniorcpa

Client
Регистрация
27.05.2014
Сообщения
2 031
Благодарностей
1 286
Баллы
113
Может разработчики зеннолаба возьмут на заметку идею о том, чтобы в кубик вывода лога добавить сохранение этого же лога в файл? Это бы уменьшило количество кубиков у новичков.)
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Код:
[i] – информационное сообщение.
[!] – предупреждение.
[x] – ошибка.
[X] – фатальная ошибка.
[d] – сообщение отладки.
Сам такое использую. Даже плагин в одном из прошлых конкурсов выкладывал. Очень удобно отлавливать места с ошибками.
Правда приходится чаще добавлять в код вывода в лог, но зато легче и быстрее потом находить место ошибки.
 
Последнее редактирование:
  • Спасибо
Реакции: LaGir и artomka

mr.green

Client
Регистрация
26.09.2019
Сообщения
211
Благодарностей
125
Баллы
43
Ваши работы приятно читать, как хорошую газету на свежую голову, привлекает отсутствие кричащих заголовков как в СпидИнфо.
 

Reputazzi

Client
Регистрация
22.02.2021
Сообщения
30
Благодарностей
5
Баллы
8
Спасибо, полезно
 
  • Спасибо
Реакции: LaGir

socsecret.ru

Client
Регистрация
30.09.2017
Сообщения
346
Благодарностей
209
Баллы
43
Мой голос за вашу работу точно будет. Сам хотел что-то подобное сделать для статьи.
 
  • Спасибо
Реакции: LaGir

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
1 697
Благодарностей
940
Баллы
113
при установке плагина - полностью не видно полей куда вводить... у меня..

это косяк PM, плагина или моих рук?
перезагружал майкер, включал-выключал отображение "свойств действия"... и так и сяк..

77889
 
  • Спасибо
Реакции: LaGir

LaGir

Client
Регистрация
01.10.2015
Сообщения
227
Благодарностей
927
Баллы
93
это косяк PM, плагина или моих рук?
перезагружал майкер, включал-выключал отображение "свойств действия"... и так и сяк..
При включённой настройке "Ограничить ширину свойств действий" PM режет ширину. Правда непонятно по какому принципу, но скорее всего исходя из разрешения монитора (у меня по-другому режет).
Соответственно, чтобы не резалось - можно снять эту галочку:

2021-05-27_20-44-49.png

После чего уже должно быть всё нормально:

2021-05-27_20-45-54.png
 
  • Спасибо
Реакции: Konrod_m

SHILY

Client
Регистрация
05.06.2016
Сообщения
258
Благодарностей
307
Баллы
63
Отличная работа, очень понравилась!:ah:
Спасибо большое за труды!:-)
 
Последнее редактирование:
  • Спасибо
Реакции: LaGir

tanichev

Client
Регистрация
14.08.2020
Сообщения
654
Благодарностей
761
Баллы
93

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
Может я не правильно что-то делаю, переменные и их значение, не совпадают
1622219008214.png1622219076132.png
 
  • Спасибо
Реакции: LaGir

LaGir

Client
Регистрация
01.10.2015
Сообщения
227
Благодарностей
927
Баллы
93
Может я не правильно что-то делаю, переменные и их значение, не совпадают
Да, верно, в плагин судя по всему нормально передаются instance и как минимум ряд свойств project (project.Profiles, project.Name), но не передаются переменные( Просмотрел этот момент, к сожалению.
На днях придумаю что-нибудь для обхода.

А пока, как временное решение, вместо этой галочки через плагин можно сохранять все переменные проекта следующим способом:
1) Выполняем в целевом шаблоне (в котором планируем использовать плагин лога) данный C#-сниппет:
Сниппет:
var sb = new StringBuilder();
foreach (var variable in project.Variables.Keys)
{
    sb.AppendFormat("{0}: {{-Variable.{1}-}}{2}", variable, project.Variables[variable].Name, Environment.NewLine);
}
string name = "zzz_" + Global.Classes.rnd.Next(1000,9999);
project.Variables.GetType().GetMethod("QuickCreateVariable").Invoke(project.Variables, new Object[]{name});
project.Variables[name].Value = sb.ToString().Trim();
2) Из переменной с префиксом zzz_ копируем содержимое в главный текстовый блок плагина (переменную после этого можно удалить):
2021-05-28_23-53-15.png

2021-05-28_23-54-21.png
3) Снимаем все галочки ("Показывать в ZP" и прочие), ставим галочку "Сохранить сообщение в отдельный файл" и указываем путь к файлу:
2021-05-28_23-55-53.png
4) При таких настройках плагин работает как "сохранятель" переменных родительского проекта. Запускаем, проверяем:
2021-05-28_23-58-08.png
 
  • Спасибо
Реакции: Roman48

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
Да, верно, в плагин судя по всему нормально передаются instance и как минимум ряд свойств project (project.Profiles, project.Name), но не передаются переменные( Просмотрел этот момент, к сожалению.
На днях придумаю что-нибудь для обхода.

А пока, как временное решение, вместо этой галочки через плагин можно сохранять все переменные проекта следующим способом:
1) Выполняем в целевом шаблоне (в котором планируем использовать плагин лога) данный C#-сниппет:
Сниппет:
var sb = new StringBuilder();
foreach (var variable in project.Variables.Keys)
{
    sb.AppendFormat("{0}: {{-Variable.{1}-}}{2}", variable, project.Variables[variable].Name, Environment.NewLine);
}
string name = "zzz_" + Global.Classes.rnd.Next(1000,9999);
project.Variables.GetType().GetMethod("QuickCreateVariable").Invoke(project.Variables, new Object[]{name});
project.Variables[name].Value = sb.ToString().Trim();
2) Из переменной с префиксом zzz_ копируем содержимое в главный текстовый блок плагина (переменную после этого можно удалить):
3) Снимаем все галочки ("Показывать в ZP" и прочие), ставим галочку "Сохранить сообщение в отдельный файл" и указываем путь к файлу:
4) При таких настройках плагин работает как "сохранятель" переменных родительского проекта. Запускаем, проверяем:
Да переменные можно после плагина, в шаблоне свой код. Не понятно, почему вы сделали несколько папок, и название общей папки, логином, а не названием шаблона.
 

LaGir

Client
Регистрация
01.10.2015
Сообщения
227
Благодарностей
927
Баллы
93
Да переменные можно после плагина, в шаблоне свой код.
Если это не проблема - то да, конечно. Можно как и библиотеку подключить, так и просто скопировать её код в общий код своего шаблона, и дергать нужные методы (модификаторы только подправить, а то по умолчанию там почти всё приватное). Плагин добавлен больше для тех, кто особо не хочет иметь дела с кодом.
Не понятно, почему вы сделали несколько папок, и название общей папки, логином, а не названием шаблона.
Если у вас шаблон, который не использует профили или ему достаточно одного - то да, можно обойтись просто общей папкой логов для конкретного шаблона.
Если же у вас более-менее сложный браузерный проект, в котором ежедневно крутятся сотни/тысячи профилей - без разграничения логов по конкретным профилям (или по другим признакам, по задачам шаблона, например) очень вероятно, что в папке логов у вас будет твориться полная содомия, логи всех профилей по всем задачам - всё в кучу. Разбираться в таких условиях при возникновении проблем довольно сложно, поэтому лучше как-то разграничивать логи.
Соответственно, по умолчанию я сделал вариант с "запасом" - с разграничением по профилям.
В то же время ничто не мешает подредактировать код либы, удалить там создание папок с логинами профилей, кому эта допопция не нужна.)
 
  • Спасибо
Реакции: Koqpe

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
так и просто скопировать её код в общий код своего шаблона, и дергать нужные методы
спасибо за статью. если у тебя вдруг есть шаблон в PM с открытым исходным кодом, скинь пожалуйста. Вчера мудохался-мудохался, так и не получилось из VS в PM перетащить. То на одно ругается, то на другое (ну тут кривые руки всему виной понятное дело).

up. Основные проблемы с telegram.bot.dll оказывается. 100500 ошибок от него, стандартная установка не катит. убрал из шаблона телегу, всё завелось в PM.
 
Последнее редактирование:
  • Спасибо
Реакции: LaGir

djmweb

Client
Регистрация
24.12.2019
Сообщения
18
Благодарностей
22
Баллы
3
Отличная статья. Отдельная благодарность за грамотное оформление и видео!
 
  • Спасибо
Реакции: LaGir

LaGir

Client
Регистрация
01.10.2015
Сообщения
227
Благодарностей
927
Баллы
93
На днях придумаю что-нибудь для обхода.
Отредактировал плагин. Работает по тому же принципу, что и предложенное решение в цитируемом посте, только теперь в плагине есть отдельное поле для вставки макросов переменных (для быстрого сбора макросов можно использовать тот же сниппет), т.е. можно использовать данную функцию вместе со всем остальным функционалом плагина.
 

Вложения

  • Спасибо
Реакции: SHILY и Roman48

Nike59

Client
Регистрация
05.08.2011
Сообщения
122
Благодарностей
122
Баллы
43
Очень полезная статья. Спасибо.
 
  • Спасибо
Реакции: LaGir

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
1 697
Благодарностей
940
Баллы
113
Отредактировал плагин
Он не мог как-нибудь пострадать в плане функционала? У меня перестали приходить оповещения в телегу с уведомлениями.. только тихие сообщения... галочки соответсвующие проверил.. может туплю.. ни кто не заметил косяков после обновления?
 

LaGir

Client
Регистрация
01.10.2015
Сообщения
227
Благодарностей
927
Баллы
93
Он не мог как-нибудь пострадать в плане функционала? У меня перестали приходить оповещения в телегу с уведомлениями.. только тихие сообщения... галочки соответсвующие проверил.. может туплю.. ни кто не заметил косяков после обновления?
Вообще не трогал код по телеграму в фиксе. Проверил ещё раз - вроде как всё ок со свойством по тихим уведомлениям. Прикрепляю исходник либы, можно попробовать самостоятельно посмотреть, и/или у себя собрать сначала либу, потом плагин на ней (исходник фикшенного плагина прикреплял к предыдущему сообщению) и затестить ещё раз.
Также на всякий случай можно проверить, не стоит ли в своём акке телеги общего отключения уведомлений на целевой чат (бывает банально забываешь что в какой-то момент выключил их).
 

Вложения

  • Спасибо
Реакции: SHILY

Dimazda

Новичок
Регистрация
01.10.2020
Сообщения
7
Благодарностей
4
Баллы
3
Постоянно в определенных местах кода вылетает ошибка "Проблема с работой плагина логов: Произошла одна или несколько ошибок.". Где можно найти логи плагина? В чем конкретно проблема?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Постоянно в определенных местах кода вылетает ошибка "Проблема с работой плагина логов: Произошла одна или несколько ошибок.". Где можно найти логи плагина? В чем конкретно проблема?
проект же открытый... проведи отладку и выясни в чем проблема.
 

Dimazda

Новичок
Регистрация
01.10.2020
Сообщения
7
Благодарностей
4
Баллы
3
проект же открытый... проведи отладку и выясни в чем проблема.
Выяснил, проблема была в коде программы, но зенка писала что проблема в плагине, а про мою ошибку ни писала ни слова
 

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