如何在slim 3中使用monolog?

问题描述:

在我app.php文件:如何在slim 3中使用monolog?

use Monolog\Logger; 
use Monolog\Handler\StreamHandler; 

class App extends \DI\Brifge\Slim\app 
{ 
public function configureContainer(ContainerBuilder $builder) 
{ 
    $dependencies = [ 
      'logger' => function (Container $container) { 
      $logger = new Monolog\Logger('logger'); 
      $filename = _DIR__ . '/../log/error.log'; 
      $stream = new Monolog\Handler\StreamHandler($filename, Monolog\Logger::DEBUG); 
      $fingersCrossed = new Monolog\Handler\FingersCrossedHandler(
      $stream, Monolog\Logger::ERROR); 
      $logger->pushHandler($fingersCrossed); 

      return $logger; 
     }, 
     ]; 
    } 
    } 

在我的自定义错误处理程序:

class CustomErrorHandler 
{ 
protected $logger; 

public function __construct(Logger $logger) 
{ 
    $this->logger = $logger; 
} 

public function __invoke(ServerRequestInterface $request, ResponseInterface $response, $exception) 
{ 
    $output = ['success'=>0, 'error'=>"Oops! Something's not right "]; 

    $this->logger->critical($output); 

    return $response->withStatus(500) 
        ->withHeader('Content-Type', 'application/json') 
        ->write(json_encode($output)); 
} 
} 

当发生错误时,会显示以下信息:

Fatal error: Uncaught Error: Class 'App\Monolog\Logger' not found in C:\xampp\htdocs\backend\app\App.php:103 Stack trace: #0 [internal function]: App\App->App{closure}(Object(DI\Container)) #1 C:\xampp\htdocs\backend\vendor\php-di\invoker\src\Invoker.php(82): call_user_func_array(Object(Closure), Array) #2 C:\xampp\htdocs\backend\vendor\php-di\php-di\src\DI\Definition\Resolver\FactoryResolver.php(81): Invoker\Invoker->call(Object(Closure), Array) #3 C:\xampp\htdocs\backend\vendor\php-di\php-di\src\DI\Definition\Resolver\ResolverDispatcher.php(58): DI\Definition\Resolver\FactoryResolver->resolve(Object(DI\Definition\FactoryDefinition), Array) #4 C:\xampp\htdocs\backend\vendor\php-di\php-di\src\DI\Container.php(287): DI\Definition\Resolver\ResolverDispatcher->resolve(Object(DI\Definition\FactoryDefinition), Array) #5 C:\xampp\htdocs\backend\vendor\php-di\php-di\src\DI\Container.php(124): DI\Container->resolveDefinition(Object(DI\Definition\FactoryDefinition)) #6 C:\xampp\htdocs\backend\app\App.php(95): DI\Container->get('l in C:\xampp\htdocs\backend\app\App.php on line 103

我已经包括在App.php文件中声明use Monolog\Logger;,但我得到了上述错误。

+0

请阅读[在什么情况下,我可以添加“紧急”或其他类似的短语到我的问题,以获得更快的答案?](/ meta.*.com/q/326569) - 总结是,这不是解决志愿者问题的理想方式,而且可能对获得答案起反作用。请不要将这添加到您的问题。 – halfer

+0

好吧,当然会阅读它! – Ayush28

你忘了configureContainer方法来注册依赖:

使用独白\记录仪; 使用Monolog \ Handler \ StreamHandler;

class App extends \DI\Bridge\Slim\App 
{ 
    public function configureContainer(ContainerBuilder $builder) 
    { 
     $dependencies = [ 
      'logger' => function (Container $container) { 
       $logger = new Monolog\Logger('logger'); 
       $filename = _DIR__ . '/../log/error.log'; 
       $stream = new Monolog\Handler\StreamHandler($filename, Monolog\Logger::DEBUG); 
       $fingersCrossed = new Monolog\Handler\FingersCrossedHandler(
       $stream, Monolog\Logger::ERROR); 
       $logger->pushHandler($fingersCrossed); 

       return $logger; 
      }, 
     ]; 

     // Register definitions 
     $builder->addDefinitions($dependencies); 
    } 
} 

你也有App类声明了一个错误,这是\DI\Bridge\Slim\App,不\DI\Brifge\Slim\app

+0

您的解决方案无济于事! – Ayush28

+0

仍然是一样的错误? –

+0

是的,我使用你的方法得到同样的错误 – Ayush28

我明白了,我错了。 无需包括线:

use Monolog\Logger; 
use Monolog\Handler\StreamHandler; 

在实例,我已经包括了完整路径。