我monolog
在我的 slim 4 应用程序中进行了配置,并将 and 设置logErrors
为logErrorDetails
true,ErrorMIddleware
但是当我遇到错误时,它不会写入日志。为了模拟错误,我打开了我的应用程序上的缓存,我得到了一个像这样的错误,默认情况下使用Call to undefined function apcu_fetch()
apcudoctrine
缓存所有元数据,并且我的开发环境中没有安装 apcu。
这是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
配置:
$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));
我检查了不同的 slim 4 骨架 Github 存储库,但没有找到任何额外的配置,所以我不知道为什么它没有将日志写入文件。也许我需要设置一个自定义的默认错误处理程序?作为 slim 4 默认的一个使用 phperror_log
函数来写日志?