Slim 4 monolog не пишет логи

Я настроил monolog в моем приложении Slim 4 и установите logErrors а также logErrorDetails верно в ErrorMIddlewareно когда я получаю ошибку, он не пишет логи. Чтобы имитировать ошибку, я включаю кеш в своем приложении и получаю такую ​​ошибкуCall to undefined function apcu_fetch() bz doctrine использование apcu по умолчанию для кеширования всех метаданных, а apcu не установлен на моем dev env.

Здесь PHP-DI конфиг для логгера:

           LoggerInterface::class => static function (Container $container) {
                $config = $container->get(Config::class);
                $logger = new Logger((string)$config->get('logger.name'));

                $fileNameSuffix = PHP_SAPI === 'cli' ? 'php-cli-' : 'php-fpm';
                $logger->pushHandler(
                    new StreamHandler(
                        $config->get('logger.log_dir') . '/' . $fileNameSuffix . '-' .    $config->get('logger.name') . '.log',
                        $config->get('logger.log_level'))
                );

                if ((bool)$config->get('main.debug')) {
                    $logger->pushHandler(new FirePHPHandler());
                }

                return $logger;
            }

и вот ErrorMiddleware config:

     $definitions[ErrorMiddleware::class] = static function(ContainerInterface $container): ErrorMiddleware {

        $middleware = new ErrorMiddleware(
            $container->get(CallableResolverInterface::class),
            $container->get(ResponseFactoryInterface::class),
            (bool)$container->get(Config::class)->get('main.debug'), //false or true
            $container->has(LoggerInterface::class) ? true : false,
            $container->has(LoggerInterface::class) ? true : false
        );
        $middleware->setErrorHandler(HttpNotFoundException::class, $container->get(NotFoundHandler::class));


        return $middleware;
    };

И да, я добавляю это промежуточное ПО в App нравится $app->add($container->get(ErrorMiddleware::class));

Я проверял различные репозитории Github с тонким скелетом 4 и не нашел никаких дополнительных конфигураций, поэтому я не знаю, почему он не записывает логи в файлы. Может мне нужно установить собственный обработчик ошибок по умолчанию? Тонкий 4 по умолчанию с использованием phperror_log функция записи логов?

1 ответ

Вот как он настраивает LoggerInterface в моем dependencies.php. Я использую пакет bzikarsky / gelf-php для отправки правильного формата GELF.

Для местной среды StreamHandler, для любой другой среды GelfHandler используется.

При использовании Graylog следите за точным портом и протоколом. В моем примере я используюUdpTransport. Не стесняйтесь использовать другой транспорт, напримерTcpTransport.

dependencies.php

<?php
use Monolog\Logger;

// ...
LoggerInterface::class => function (ContainerInterface $c) {
    $config = $c->get(Configuration::class)->getArray('logger');
    $logger = new Logger($config['name']);

    if ($c->get(Configuration::class)->getString('settings.environment') === 'local') {
        $processor = new UidProcessor();
        $logger->pushProcessor($processor);

        $handler = new StreamHandler($config['path'], $config['level']);
    } else {
        $transport = new UdpTransport(
            $config['graylog']['host'],
            $config['graylog']['port'],
            UdpTransport::CHUNK_SIZE_LAN
        );

        $publisher = new Publisher();
        $publisher->addTransport($transport);
        $handler = new GelfHandler($publisher);
    }
    $logger->pushHandler($handler);

    return $logger;
},
// ...
Другие вопросы по тегам