【问题标题】:How to use monolog in slim 3?如何在 slim 3 中使用独白?
【发布时间】:2017-07-31 01:21:52
【问题描述】:

在我的 app.php 文件中:

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));
 }
}

抛出错误时,会显示以下消息:

致命错误:未捕获的错误:在 C:\xampp\htdocs\backend\app\App.php:103 中找不到类 'App\Monolog\Logger' 堆栈跟踪:#0 [内部函数]: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\FactoryDe​​finition), Array) #4 C:\xampp\htdocs\backend\vendor\php-di\php-di\src\DI\Container.php(287): DI\Definition\Resolver\ResolverDispatcher->resolve (对象(DI\Definition\FactoryDe​​finition), Array) #5 C:\xampp\htdocs\backend\vendor\php-di\php-di\src\DI\Container.php(124): DI\Container->resolveDefinition (对象(DI\Definition\FactoryDe​​finition)) #6 C:\xampp\htdocs\backen d\app\App.php(95): DI\Container->get('l in C:\xampp\htdocs\backend\app\App.php on line 103

我在 App.php 文件中包含了 use Monolog\Logger; 语句,但出现上述错误。

【问题讨论】:

标签: monolog slim-3


【解决方案1】:

您忘记在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

【讨论】:

  • 你的解决方案没有用!
【解决方案2】:

我明白我错在哪里了。 无需包含以下行:

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

在实例化的时候,我已经包含了完整的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    相关资源
    最近更新 更多