Skip to content

Commit

Permalink
Fix Monolog handler instantiation (laravel#30123)
Browse files Browse the repository at this point in the history
  • Loading branch information
X-Coder264 authored and i-bajrai committed Oct 4, 2019
1 parent 790e78a commit 1ce67e8
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src/Illuminate/Log/LogManager.php
Expand Up @@ -7,6 +7,7 @@
use InvalidArgumentException;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\ErrorLogHandler;
use Monolog\Handler\FormattableHandlerInterface;
use Monolog\Handler\HandlerInterface;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Handler\SlackWebhookHandler;
Expand Down Expand Up @@ -393,9 +394,17 @@ protected function prepareHandlers(array $handlers)
*/
protected function prepareHandler(HandlerInterface $handler, array $config = [])
{
if (! isset($config['formatter'])) {
$isHandlerFormattable = false;

if (Monolog::API === 1) {
$isHandlerFormattable = true;
} elseif (Monolog::API === 2 && $handler instanceof FormattableHandlerInterface) {
$isHandlerFormattable = true;
}

if ($isHandlerFormattable && ! isset($config['formatter'])) {
$handler->setFormatter($this->formatter());
} elseif ($config['formatter'] !== 'default') {
} elseif ($isHandlerFormattable && $config['formatter'] !== 'default') {
$handler->setFormatter($this->app->make($config['formatter'], $config['formatter_with'] ?? []));
}

Expand Down
39 changes: 39 additions & 0 deletions tests/Log/LogManagerTest.php
Expand Up @@ -9,6 +9,7 @@
use Monolog\Formatter\NormalizerFormatter;
use Monolog\Handler\LogEntriesHandler;
use Monolog\Handler\NewRelicHandler;
use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogHandler;
use Monolog\Logger as Monolog;
Expand Down Expand Up @@ -164,6 +165,44 @@ public function testLogManagerCreatesMonologHandlerWithConfiguredFormatter()
$this->assertSame('Y/m/d--test', $dateFormat->getValue($formatter));
}

public function testLogManagerCreatesMonologHandlerWithProperFormatter()
{
$config = $this->app->make('config');
$config->set('logging.channels.null', [
'driver' => 'monolog',
'handler' => NullHandler::class,
'formatter' => HtmlFormatter::class,
]);

$manager = new LogManager($this->app);

// create logger with handler specified from configuration
$logger = $manager->channel('null');
$handler = $logger->getLogger()->getHandlers()[0];

if (Monolog::API === 1) {
$this->assertInstanceOf(NullHandler::class, $handler);
$this->assertInstanceOf(HtmlFormatter::class, $handler->getFormatter());
} else {
$this->assertInstanceOf(NullHandler::class, $handler);
}

$config->set('logging.channels.null2', [
'driver' => 'monolog',
'handler' => NullHandler::class,
]);

$logger = $manager->channel('null2');
$handler = $logger->getLogger()->getHandlers()[0];

if (Monolog::API === 1) {
$this->assertInstanceOf(NullHandler::class, $handler);
$this->assertInstanceOf(LineFormatter::class, $handler->getFormatter());
} else {
$this->assertInstanceOf(NullHandler::class, $handler);
}
}

public function testLogManagerCreateSingleDriverWithConfiguredFormatter()
{
$config = $this->app['config'];
Expand Down

0 comments on commit 1ce67e8

Please sign in to comment.