Логирование на продакшене, варианты

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Логирование на продакшене, варианты

Сообщение maleks »

Приветствую.
Скажите кто как подходит к задаче удобного логирования ошибок и сообщений бизнес плана на работающем(в продакшине) проекте?
Задача - чтобы не пропустить ошибки в коде, если возникают.
И знать о некоторых других проблемах, которые можно залогировать, по API, например, не получается достучаться, какая нибудь бизнес ситуация требующая анализа и т.д.

В документации мы читаем:
Использование Системы логирования Yii включает следующие шаги:

1)Запись сообщений лога в различных частях кода приложения;
2)Настройка целей лога в конфигурации приложения;
3)Изучение отфильтрованных сообщений лога, например, при помощи Отладчика Yii.
Пункты 1-2 понятны.
Пункт 3 - не совсем.

Отладчик этот на проде будет выключен, да и Отладчик Yii вроде показывает(и ищет в нем) только лог текущего запроса, а не весь лог проекта.

Мне же нужно работать со всем логом проекта.
Чтобы не упустить проблемы, может редкие ситуации, но в которых возникнут проблемы.

Проблема №1. Где физически храним.
Вариант хранения лога в файле (через FileTarget) вызывает такие вопросы:
- как удобно смотреть такой файл? Вариант что на сервер заходить и время от времени его просматривать выглядит не очень интересным, записи повторяются, да там не один файл, а может быть много.
- если парсить как то, но опять файлов много, все это автоматизировать не хотелось бы

В БД хранить выглядит вроде удобней.
Почему то правда по 2 записи делает, но с таким логом уже можно и в GridView поработать, поотмечать что просмотрено, может одинаковые сообщения как то пропускать.

Проблема №2. Как логически организовать.
Как организовать лог логически так, чтобы с ним было удобно работать.
Бизнес лог ведем через Yii::info() с разными категориями.
А Yii::error()/warning() оставляем для уже проблем кодового характера. И тоже тут категории. В доке написано что категории называть по имени метода, пока не понял насколько это удобно.
Может их вообще в разных таблицах БД сохранять.
Плюс лог идет не только от одного приложения, а и от консольного приложения тоже. В схеме таблицы лога, этот момент не учтен.

Если кто уже эту проблему внимательно изучал, поделитесь наблюдениями, может даже какое расширение есть под это.

В общем, смысл должен быть ясен - проект начинает работать и надо не упустить ошибки, и иметь бизнес лог, чтобы понять некоторые запутанные ситуации. Тестов то нет, а в код постоянно вносятся изменения. Недавно вон кое что отвалилось, узнал не сразу... (даже доступ к файлам логов физически не всегда имеется у разработчика).
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Логирование на продакшене, варианты

Сообщение ElisDN »

maleks писал(а): 2021.09.24, 14:30 проект начинает работать и надо не упустить ошибки
Для экстренного оповещения об ошибках удобно использовать сервис Sentry. Для этого достаточно проинициализировать клиент в web/index.php и консольном yii:

Код: Выделить всё

if (YII_ENV_PROD) {
    Sentry\init(['dsn' => ...]);
}
и переопределить ErrorHandler-ы для веба и консоли:

Код: Выделить всё

final class SentryWebErrorHandler extends \yii\web\ErrorHandler
{
    public function logException($exception): void
    {
        parent::logException($exception);
        $this->reportException($exception);
    }

    private function reportException(Throwable $exception): void
    {
        if ($exception instanceof HttpException && in_array($exception->statusCode, [404, 403], true)) {
            return;
        }

        captureException($exception);
    }
}

Код: Выделить всё

'errorHandler' => [
    'class' => SentryWebErrorHandler::class,
    'errorAction' => 'site/error',
],
Теперь сам Sentry будет присылать уведомления.
Последний раз редактировалось ElisDN 2021.09.24, 15:10, всего редактировалось 3 раза.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Логирование на продакшене, варианты

Сообщение ElisDN »

maleks писал(а): 2021.09.24, 14:30 если парсить как то, но опять файлов много, все это автоматизировать не хотелось бы
Если нужны только логи сайта, то можно хранить в БД с DbTarget и смотреть в админке. Но там не будет логов, если отвалится БД.

В крупных проектах для логов часто поднимают отдельный стэк ELK (ElasticSearch + Logstash + Kibana). В нём Logstash парсит все файлы логов и всё в JSON-формате записывает в ElasticSearch. Потом уже из ElasticSearch логи удобно просматриваются и фильтруются в панели Kibana. Такой подход позволяет логировать не только приложение, но и собирать любые логи со всего сервера.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Логирование на продакшене, варианты

Сообщение maleks »

Понятно. Спасибо.
Yii2 universal module sceleton - for basic and advanced templates
Ответить