Ответы пользователя по тегу Журналирование
  • Как правильно конфигурировать логгер и внедрять зависимость?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    5. внедрять логер в зависимости от интерфейса. В DI есть возможность вызвать метод setLogger в зависимости от интерфейса.
    Например вы создаете интерфейсы:
    FileLoggerAware extends LoggerAwareInterface 
    MysqlLoggerAware extends LoggerAwareInterface


    теперь конфигурирует DI
    $container->share(FileLogger::class,function(){
           return new NullLogger;//тут реализация file логера
    });
    $container->share(MysqlLogger::class,function(){
          return new NullLogger;//тут реализация Mysql логера
    });
    $container
        ->inflector(FileLoggerAware::class)
        ->invokeMethod('setLogger', [FileLogger::class]) 
    ;
    $container
        ->inflector(MysqlLoggerAware::class)
        ->invokeMethod('setLogger', [MysqlLogger::class]) 
    ;


    и все в нужном классе делаешь, (но все классы должны работать через awaring di, прилетать автоматом через конструктор)
    class MyClass implements FileLoggerAware
    {
    
    use LoggerAwareTrait;
    
    }


    ссылки:
    https://github.com/php-fig/log/blob/master/Psr/Log...
    https://container.thephpleague.com/3.x/inflectors/
    Ответ написан
    2 комментария
  • Как правильно организовать уровни исключений и логирование?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Основная ошибка проектировать исключения с учётом как их будут использовать, использование исключений это задача кода приложения, код приложения может быть разный, может меняться например
    Сервис пользователя UserService имеет метод получения пользователя по id на выходе только UserEntity если по каким то причинам нет пользователя то кидани UserNotFoundException
    Теперь приложение варианты использования:
    1. Для рест апи в контроллере сделаем запрос на получение пользователя и обработав исключение там же отправим ответ 404, отсутствие пользователя не так критично.
    2. Есть форма сохранения например товара или заказа, и нужно получит информацию о пользователе по его сессионной id, делаем запрос а пользователя нет, обрабатываем исключение например глобальным обработчиком приложения и логируем, выдаём пользователю уведомление о сбое, вот тут критично. 500 ответ
    Ответ написан
    5 комментариев