Skip to content

Commit 0d4612d

Browse files
committed
feat: [LogManager] added to extend Laravel's LogManager and replace Logger to our custom Logger
1 parent eb4675b commit 0d4612d

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

src/LogManager.php

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
namespace Onramplab\LaravelLogEnhancement;
4+
5+
use Illuminate\Log\LogManager as IlluminateLoggerManager;
6+
use Monolog\Handler\StreamHandler;
7+
use Monolog\Logger as Monolog;
8+
use Psr\Log\LoggerInterface;
9+
use Throwable;
10+
11+
/**
12+
* Replace with our custom Logger
13+
*/
14+
class LogManager extends IlluminateLoggerManager
15+
{
16+
/**
17+
* Create an emergency log handler to avoid white screens of death.
18+
*
19+
* @return \Psr\Log\LoggerInterface
20+
*/
21+
protected function createEmergencyLogger()
22+
{
23+
$config = $this->configurationFor('emergency');
24+
25+
$handler = new StreamHandler(
26+
$config['path'] ?? $this->app->storagePath().'/logs/laravel.log',
27+
$this->level(['level' => 'debug'])
28+
);
29+
30+
return new Logger(
31+
new Monolog('laravel', $this->prepareHandlers([$handler])),
32+
$this->app['events']
33+
);
34+
}
35+
36+
/**
37+
* Create a new, on-demand aggregate logger instance.
38+
*
39+
* @param array $channels
40+
* @param string|null $channel
41+
* @return \Psr\Log\LoggerInterface
42+
*/
43+
public function stack(array $channels, $channel = null)
44+
{
45+
return new Logger(
46+
$this->createStackDriver(compact('channels', 'channel')),
47+
$this->app['events']
48+
);
49+
}
50+
51+
/**
52+
* Attempt to get the log from the local cache.
53+
*
54+
* @param string $name
55+
* @return \Psr\Log\LoggerInterface
56+
*/
57+
protected function get($name)
58+
{
59+
try {
60+
return $this->channels[$name] ?? with($this->resolve($name), function ($logger) use ($name) {
61+
return $this->channels[$name] = $this->tap($name, new Logger($logger, $this->app['events']));
62+
});
63+
} catch (Throwable $e) {
64+
return tap($this->createEmergencyLogger(), function ($logger) use ($e) {
65+
$logger->emergency('Unable to create configured logger. Using emergency logger.', [
66+
'exception' => $e,
67+
]);
68+
});
69+
}
70+
}
71+
}

tests/Unit/LoggerManagerTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
namespace Onramplab\LaravelLogEnhancement\Tests\Unit\Concerns;
4+
5+
use Onramplab\LaravelLogEnhancement\Logger;
6+
use Onramplab\LaravelLogEnhancement\LogManager;
7+
use Onramplab\LaravelLogEnhancement\Tests\TestCase;
8+
9+
class LoggerManagerTest extends TestCase
10+
{
11+
/**
12+
* @test
13+
*
14+
* @return void
15+
*/
16+
public function logger_instance_should_be_our_custom_logger()
17+
{
18+
$manager = new LogManager($this->app);
19+
20+
$logger = $manager->channel('stack');
21+
22+
$this->assertInstanceOf(Logger::class, $logger);
23+
}
24+
}

0 commit comments

Comments
 (0)