Подключение и использование
Получение логгера
Логгер внедряется в любой сервис, контроллер или компонент через 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');
}
Правила именования контекста
Хорошие контексты делают логи самодокументируемыми. Чтобы они оставались единообразными, следуйте правилам:
-
Основой контекста является название модуля, отражающее область бизнес-логики. Примеры:
Evaluation— процесс оценки заявок;Contests— управление конкурсами;Users— работа с пользователями.
-
При необходимости уточнения добавляется второй уровень через двоеточие:
Evaluation:ExpertAssignment— назначение экспертов;Applications:Moderation— модерация проектов.
-
Технические роли (
Service,Controllerи т. п.) в названии не используются, так как контекст должен отражать бизнес-смысл, а не структуру кода.
💬 Контекст — часть “языка логирования” проекта. Он должен быть стабильным, понятным и единообразным во всех модулях.
Контекст запроса
При логировании внутри HTTP-запроса система автоматически добавляет поля:
user— идентификатор пользователя (если авторизован);url— адрес текущего запроса.
Это позволяет связывать бизнес-события с конкретными действиями пользователей и упрощает анализ логов.
Переменные окружения
Настройки логирования задаются через .env или переменные окружения.
| Переменная | Назначение | Пример значения |
|---|---|---|
LOG_LEVEL | Минимальный уровень логирования. | debug, info, warn, error |
LOG_PRETTY | Включает человеко-читаемый формат (обычно в dev). | true |
LOG_SILENT_HTTP | Отключает автоматические HTTP-логи (актуально в тестах). | true |
Если переменные не заданы, применяются значения по умолчанию:
| Окружение | Значения по умолчанию |
|---|---|
| dev | LOG_LEVEL=debug, LOG_PRETTY=true |
| prod | LOG_LEVEL=info, LOG_PRETTY=false |
🔧 Уровень логирования можно переопределить без релиза — через переменные окружения при запуске приложения.
Чек-лист перед ревью
- Логгер подключён через dependency injection.
- Контекст задан явно через
setContext(). - Уровень логирования соответствует окружению.
- Логи не содержат чувствительных данных.