Как позвонить на монолог из index.php? - PullRequest
3 голосов
/ 04 мая 2019

Существует пример использования Monolog с PHP-DI (из руководства есть 2 файла - index.php и config.php:

<?php
// config.php

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

return [
    // ...

    Psr\Log\LoggerInterface::class => DI\factory(function () {
        $logger = new Logger('mylog');

        $fileHandler = new StreamHandler('path/to/your.log', Logger::DEBUG);
        $fileHandler->setFormatter(new LineFormatter());
        $logger->pushHandler($fileHandler);

        return $logger;
    }),
];

Этот config.php использует в следующем коде:

// index.php    
use DI\ContainerBuilder;

require __DIR__ . '/../vendor/autoload.php';

$containerBuilder = new ContainerBuilder;
$containerBuilder->addDefinitions(__DIR__ . '/config.php');
$container = $containerBuilder->build();

Как я могу использовать его сейчас в index.php? Я регулярно использую Monolog таким образом:

$log = new Logger('name'); 
$log->warning('Foo');

Но как вызвать его с помощью контейнера ? Я смог сделать это в простом режиме $ container-> set (), $ container-> get (). Но таким образом, используя Container Builder, я не могу найти способ сделать это. Более того, когда я делаю var_dump($container), в нем нет никаких признаков логгера.

1 Ответ

2 голосов
/ 04 мая 2019

Вам необходимо заменить $log = new Logger('name') на:

$log = $container->get(\Psr\Log\LoggerInterface::class);

См. Эту часть документации: http://php -di.org / doc / getting-start.html # 3-create-the-objects

...