【发布时间】:2019-12-16 09:39:17
【问题描述】:
我在我的 slim 4 应用程序中配置了 monolog,并在 ErrorMIddleware 中将 logErrors 和 logErrorDetails 设置为 true,但是当我遇到错误时,它不会写入日志。为了模拟错误,我打开了我的应用程序上的缓存,我收到了这样的错误Call to undefined function apcu_fetch() b-z doctrine 默认情况下使用 apcu 缓存所有元数据,并且我的开发环境中没有安装 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 默认使用 php error_log 函数来写日志?
【问题讨论】: