有了 slim v3,你 can't use hooks anymore.
这是我想出的解决方案:
添加一个新的中间件
可以将中间件视为应用于每个传入请求的函数。因此,它会拦截每个请求,允许我们记录所需的一切。
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
$app->add(function (Request $request, Response $response, callable $next) {
$route = $request->getAttribute('route');
$this->logger->info($request->getMethod() . ' ' . $route->getPattern(), [$route->getArguments()]);
$response = $next($request, $response);
$this->logger->info($response->getStatusCode() . ' ' . $response->getReasonPhrase(), [(string)$response->getBody()]);
return $response;
});
记录器设置
当然,你需要像这样在容器中设置 Logger 依赖
$container = $app->getContainer();
// monolog
$container['logger'] = function ($c) {
$settings = $c->get('settings')['logger'];
$logger = new Monolog\Logger($settings['name']);
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
$logger->pushHandler(new Monolog\Handler\StreamHandler($settings['path'], $settings['level']));
return $logger;
};
使用记录器设置
return [
'determineRouteBeforeAppMiddleware' => true, //VERY IMPORTANT for route logging
'settings' => [
// Monolog settings
'logger' => [
'name' => 'slim-app',
'path' => __DIR__ . '/../logs/app.log',
'level' => \Monolog\Logger::DEBUG,
]
]
]
输出
[2017-06-18 03:40:19] slim-app.INFO: GET /api/publication/{id:[0-9]+} [{"id":"0"}] {"uid":"6e64305"}
[2017-06-18 03:40:19] slim-app.INFO: 200 OK ["[]"] {"uid":"6e64305"}
希望这对某人有所帮助