Существует пример использования 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)
, в нем нет никаких признаков логгера.