> For the complete documentation index, see [llms.txt](https://prethink.gitbook.io/prtelegrambot/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://prethink.gitbook.io/prtelegrambot/ru/logirovaniya.md).

# Логирования

Начиная с версии **0.9.2**, фреймворк поддерживает использование пользовательских логгеров на основе **`Microsoft.Extensions.Logging.abstraction`** , реализующих интерфейсы `ILogger` и `ILoggerFactory`.

Собственную реализацию логирования можно подключить к боту через `ILoggerFactory`, используя:

* билдер бота;
* либо DI-контейнер.

## F.A.Q

**Вопрос:** Зачем передавать логгер внутрь бота напрямую, если его можно зарегистрировать через DI?

**Ответ:** Фреймворк использует логирование не только в ваших командах, но и внутри самого бота — для событий, фоновых задач и внутренних операций.

Чтобы весь бот использовал ваш логгер, нужно зарегистрировать **ILoggerFactory/ILogger** (или прокинуть фабрику через билдера). Тогда все внутренние сообщения, включая события бота, будут логироваться через вашу реализацию.

## Пример подключения собственного логгера

⚠️ **Важно:** ILoggerFactory/ILogger используется в "[приоритетах разрешения компонентов](/prtelegrambot/ru/dependency-injection/prioritety-razresheniya-komponentov.md)".

1. `ILoggerFactory`, заданная через билдер
2. `ILogger`, полученная из DI-контейнера
3. `ILoggerFactory`, полученная из DI-контейнера
4. Дефолтный логгер на основе событий.

### Через DI-контейнер

```csharp
// Регистрация собственной фабрики логгеров в DI
builder.Services.AddTransient<ILoggerFactory, Реализация ILoggerFactory>();
```

### Через билдер бота

```csharp
var bot = new PRBotBuilder("YOUR_BOT_TOKEN")
    .SetLoggerFactory(new Реализация ILoggerFactory())
    .Build();
```

## Использование логгера

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

```csharp
var logger = bot.GetLogger<T>();
```

Где `T` — тип, для которого создаётся логгер (используется как категория логирования).

Полученный логгер реализует интерфейс `ILogger<T>` из **Microsoft.Extensions.Logging.Abstractions**, поэтому с ним можно работать стандартным образом:

```csharp
logger.LogInformation
logger.LogWarning
logger.LogError
```
