@unity_ultra_hardcore

Как правильно организовать логгирование в монолитном веб-приложении?

Здравствуйте.

У меня есть средних размеров монолитное приложение, написанное на symfony (~150 сервисов), для логгирования используется monolog.
Практически в каждом сервисе есть логгирование операций (логгер внедряется как зависимость) и возникла проблема с фильтрацией сообщений по отправителю.
Скажем, в двух сервисах есть такой код:
// AService
$this->logger->info("Message sent to {user}", ['user' => $user]);
// BService
$this->logger->info("Message sent to {user}", ['user' => $user]);

В лог-файле мне хотелось бы понимать какой именно сервис отправил эту строку и что ей предшествовало именно в контексте этого сервиса.

Какие я вижу решения проблемы:

1. Писать в каждом сервисе в каждое сообщение некую метку:
// AService
$this->logger->info("{service} some message", ['service' => __CLASS__]);
$this->logger->info("{service} another message", ['service' => __CLASS__]);

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

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

Пожалуйста, поделитесь своими мыслями на этот счёт. Как бы вы организовали логгирование в таком случае?
  • Вопрос задан
  • 422 просмотра
Пригласить эксперта
Ответы на вопрос 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Второй вариант

Только не надо создавать свои логгеры. Достаточно добавить тег.
symfony.com/doc/current/reference/dic_tags.html#mo...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы