Перейти к основному содержимому

Подключение и использование

Получение логгера

Логгер внедряется в любой сервис, контроллер или компонент через dependency injection. После внедрения требуется указать контекст, чтобы логи было проще анализировать.

@Injectable()
export class ProjectService {
constructor(private readonly logger: Logger) {
this.logger.setContext('Projects');
}

async createProject(data: CreateProjectDto) {
this.logger.log('Project created', { project: 42, user: data.ownerId });
}
}

Контекст логгера

Контекст указывает, к какому модулю или бизнес-процессу относится лог. Он помогает группировать события и быстрее понимать источник при анализе системы.

Контекст задаётся вручную при инициализации логгера:

constructor(private readonly logger: Logger) {
this.logger.setContext('Evaluation');
}

Правила именования контекста

Хорошие контексты делают логи самодокументируемыми. Чтобы они оставались единообразными, следуйте правилам:

  1. Основой контекста является название модуля, отражающее область бизнес-логики. Примеры:

    • Evaluation — процесс оценки заявок;
    • Contests — управление конкурсами;
    • Users — работа с пользователями.
  2. При необходимости уточнения добавляется второй уровень через двоеточие:

    • Evaluation:ExpertAssignment — назначение экспертов;
    • Applications:Moderation — модерация проектов.
  3. Технические роли (Service, Controller и т. п.) в названии не используются, так как контекст должен отражать бизнес-смысл, а не структуру кода.

💬 Контекст — часть “языка логирования” проекта. Он должен быть стабильным, понятным и единообразным во всех модулях.

Контекст запроса

При логировании внутри HTTP-запроса система автоматически добавляет поля:

  • user — идентификатор пользователя (если авторизован);
  • url — адрес текущего запроса.

Это позволяет связывать бизнес-события с конкретными действиями пользователей и упрощает анализ логов.

Переменные окружения

Настройки логирования задаются через .env или переменные окружения.

ПеременнаяНазначениеПример значения
LOG_LEVELМинимальный уровень логирования.debug, info, warn, error
LOG_PRETTYВключает человеко-читаемый формат (обычно в dev).true
LOG_SILENT_HTTPОтключает автоматические HTTP-логи (актуально в тестах).true

Если переменные не заданы, применяются значения по умолчанию:

ОкружениеЗначения по умолчанию
devLOG_LEVEL=debug, LOG_PRETTY=true
prodLOG_LEVEL=info, LOG_PRETTY=false

🔧 Уровень логирования можно переопределить без релиза — через переменные окружения при запуске приложения.

Чек-лист перед ревью

  • Логгер подключён через dependency injection.
  • Контекст задан явно через setContext().
  • Уровень логирования соответствует окружению.
  • Логи не содержат чувствительных данных.