Найти в Дзене
CreeX

Как отправлять логи из Unity в Telegram?

Идея отправлять логи из Unity в Telegram, мне пришла когда мне стало не хватать двух мониторов для разработки&
Делать это достаточно легко, как с помощью REST API, так и с помощью библиотек находящихся в общем доступе. В данном мануале мы будем использовать способ с использованием библиотеки https://github.com/TelegramBots/Telegram.Bot , для работы библиотеки необходимо так же скачать библиотеку

Идея отправлять логи из Unity в Telegram, мне пришла когда мне стало не хватать двух мониторов для разработки&

Делать это достаточно легко, как с помощью REST API, так и с помощью библиотек находящихся в общем доступе. В данном мануале мы будем использовать способ с использованием библиотеки https://github.com/TelegramBots/Telegram.Bot , для работы библиотеки необходимо так же скачать библиотеку [Newtonsoft.Json](https://github.com/jilleJr/Newtonsoft.Json-for-Unity ), скачав и установив это, мы готовы начать работу с логами.

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

Для того что-бы можно было легко изменять данные, создадим Scriptable Object, в котором зададим поля Token и ChatId

https://gitlab.com/-/snippets/2072714
https://gitlab.com/-/snippets/2072714

Далее определимся со структурой лога, так как все логи будут отправляться в реальном времени, то хранить дату и время создания не нужно и исходя из стандартов, будем хранить:

1. Тип лога

2. Сообщение

3. Подробная ошибка

Всё это будет задаваться при создании и не может быть изменено

Разберёмся с типом логов

Изначально я хотел использовать стандартные типы используемые в Unity, но я решил для независимости системы сделать свои Перечисления.

https://gitlab.com/-/snippets/2072714
https://gitlab.com/-/snippets/2072714

Теперь необходимо связать наши перечисления с перечислениями самого Unity, сделаем это при помощи класса расширения

https://gitlab.com/-/snippets/2072714
https://gitlab.com/-/snippets/2072714

Создадим модель данных самого лога. Исходя из наших необходимостей.

https://gitlab.com/-/snippets/2072714
https://gitlab.com/-/snippets/2072714

Теперь определимся с ботом и его возможностями. Бот будет отвечать только за одно - за отправку логов в чат.

https://gitlab.com/-/snippets/2072714
https://gitlab.com/-/snippets/2072714

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

Для этого мы введём специальные контейнеры в которых сможем хранить логи.

https://gitlab.com/-/snippets/2072714
https://gitlab.com/-/snippets/2072714

Мы всё еще не начали получать логи от Unity, как же это сделать?

Всё просто, существует событие, которое отдаёт нам логи от Unity. (Application.logMessageReceivedThreaded), он отдаёт нам сообщение, ошибку и тип лога в Юнити формате.

https://gitlab.com/-/snippets/2072714
https://gitlab.com/-/snippets/2072714

Теперь как же нам отправить логи в Telegram? Всё просто нужно просто подписаться на событие добавления лога в контейнер.

https://gitlab.com/-/snippets/2072714
https://gitlab.com/-/snippets/2072714

Возможно это довольно не тривиальная задача и вообще некоторым она покажется странной, ведь зачем отправлять логи в Telegram если они всегда видны в Unity. Но я скажу так - это правда удобно.