来自中间件的 Slimphp 日志
Slimphp log from middleware
我在 Slim PHP 项目中使用 Monolog 进行日志记录但无法从中间件进行日志记录。
在dependdencies.php我有
$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;
};
然后在middleware.php我有
use App\Middleware\Logging;
$app->add(new Logging($container->logger));
App\Middleware\Logging 为:
<?php
namespace App\Middleware;
class Logging
{
public function __construct($logger)
{
$this->logger = $logger;
}
public function __invoke($request, $response, $next)
{
$routeParams = $request->getAttribute('routeInfo')[2];
$this->logger->info($request->getMethod() . " -- " . $request->getUri());
return $next($request, $response);
}
}
然后如何从另一个中间件文件登录?
我也有App/Middleware/CacheMiddleware
<?php
namespace App\Middleware;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
class CacheMiddleware
{
public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next)
{
//$this->logger->info('test');
$response->getBody()->write('BEFORE');
return $next($request, $response);
}
}
但是我得到一个错误Call to a member function info() on null
任何帮助都会很棒。
谢谢
在您的代码中,class CacheMiddleware
没有成员 $logger
。在 class Logging
中,您将一个记录器实例传递给构造函数并相应地设置 $this->logger
,但在 CacheMiddleware
中您不需要。
在另一个 class:
中做同样的事情
class CacheMiddleware
{
public function __construct($logger)
{
$this->logger = $logger;
}
// rest of class definition
}
并且当您将 CacheMiddleware
的新实例添加到应用程序中间件时,将 $container['logger']
传递给构造函数,就像您对 $app->add(new Logging($container->logger));
所做的那样:
$app->add(new CacheMiddleware($container->logger));
我在 Slim PHP 项目中使用 Monolog 进行日志记录但无法从中间件进行日志记录。
在dependdencies.php我有
$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;
};
然后在middleware.php我有
use App\Middleware\Logging;
$app->add(new Logging($container->logger));
App\Middleware\Logging 为:
<?php
namespace App\Middleware;
class Logging
{
public function __construct($logger)
{
$this->logger = $logger;
}
public function __invoke($request, $response, $next)
{
$routeParams = $request->getAttribute('routeInfo')[2];
$this->logger->info($request->getMethod() . " -- " . $request->getUri());
return $next($request, $response);
}
}
然后如何从另一个中间件文件登录?
我也有App/Middleware/CacheMiddleware
<?php
namespace App\Middleware;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
class CacheMiddleware
{
public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next)
{
//$this->logger->info('test');
$response->getBody()->write('BEFORE');
return $next($request, $response);
}
}
但是我得到一个错误Call to a member function info() on null
任何帮助都会很棒。
谢谢
在您的代码中,class CacheMiddleware
没有成员 $logger
。在 class Logging
中,您将一个记录器实例传递给构造函数并相应地设置 $this->logger
,但在 CacheMiddleware
中您不需要。
在另一个 class:
class CacheMiddleware
{
public function __construct($logger)
{
$this->logger = $logger;
}
// rest of class definition
}
并且当您将 CacheMiddleware
的新实例添加到应用程序中间件时,将 $container['logger']
传递给构造函数,就像您对 $app->add(new Logging($container->logger));
所做的那样:
$app->add(new CacheMiddleware($container->logger));