Skip to content

Commit 15d14c1

Browse files
Fix issue where non-cli requests ended up causing driver missing exception (#9)
1 parent 4873c46 commit 15d14c1

File tree

5 files changed

+58
-12
lines changed

5 files changed

+58
-12
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
],
2121
"license": "MIT",
2222
"require": {
23-
"php": "7.*|8.*",
23+
"php": ">=7.1|8.*",
2424
"illuminate/log": ">=6.0",
2525
"illuminate/console": ">=6.0",
2626
"illuminate/support": ">=6.0",

src/Binder/LogOutputBinder.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44

55
namespace DevThis\ConsoleLogg\Binder;
66

7-
use DevThis\ConsoleLogg\Console\ConsoleLogg;
87
use DevThis\ConsoleLogg\Interfaces\Binder\LogOutputBindedInterface;
9-
use Illuminate\Contracts\Config\Repository;
8+
use DevThis\ConsoleLogg\LogHandlers\ConsoleApp;
109
use Illuminate\Log\LogManager;
1110
use Symfony\Component\Console\Output\OutputInterface;
1211

@@ -19,7 +18,7 @@ class LogOutputBinder implements LogOutputBindedInterface
1918
{
2019
public function attach(OutputInterface $output, LogManager $logManager): void
2120
{
22-
$consoleLogger = new ConsoleLogg($output);
21+
$consoleLogger = new ConsoleApp($output);
2322

2423
$logManager->extend(
2524
'console-logg',

src/Console/ConsoleLogg.php renamed to src/LogHandlers/ConsoleApp.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<?php
2-
32
declare(strict_types=1);
43

5-
namespace DevThis\ConsoleLogg\Console;
4+
namespace DevThis\ConsoleLogg\LogHandlers;
65

76
use Monolog\Handler\HandlerInterface;
87
use Symfony\Component\Console\Logger\ConsoleLogger;
98

10-
class ConsoleLogg extends ConsoleLogger implements HandlerInterface
9+
class ConsoleApp extends ConsoleLogger implements HandlerInterface
1110
{
11+
// Undocumented method required by Laravel LogManager
1212
public function getHandlers(): array
1313
{
1414
return [$this];

src/LogHandlers/NonConsole.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace DevThis\ConsoleLogg\LogHandlers;
5+
6+
use Monolog\Handler\HandlerInterface;
7+
use Psr\Log\NullLogger;
8+
9+
// NonConsole does as little as possible
10+
// it will be resolved as the console-logg log handler driver if the context is not console. (e.g. PHP-FPM)
11+
class NonConsole extends NullLogger implements HandlerInterface {
12+
// Undocumented method required by Laravel LogManager
13+
public function getHandlers(): array
14+
{
15+
return [];
16+
}
17+
18+
public function isHandling(array $record): bool
19+
{
20+
return false;
21+
}
22+
23+
public function handle(array $record): bool
24+
{
25+
return false;
26+
}
27+
28+
public function handleBatch(array $records): void
29+
{
30+
}
31+
32+
public function close(): void
33+
{
34+
}
35+
}

src/Providers/ConsoleLoggServiceProvider.php

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use DevThis\ConsoleLogg\Interfaces\Binder\LogOutputBindedInterface;
1010
use DevThis\ConsoleLogg\Interfaces\Listener\LogManagerResolverListenerInterface;
1111
use DevThis\ConsoleLogg\Listeners\LogManagerResolverListener;
12+
use DevThis\ConsoleLogg\LogHandlers\NonConsole;
1213
use Illuminate\Log\LogManager;
1314
use Illuminate\Support\ServiceProvider;
1415

@@ -23,17 +24,28 @@ class ConsoleLoggServiceProvider extends ServiceProvider
2324
*/
2425
public function register()
2526
{
26-
// Support built-in PHP dev server or console kernel
27-
if (PHP_SAPI !== 'cli-server' && $this->app->runningInConsole() === false) {
27+
// TODO: Move this into documentation in a non-breaking fashion.
28+
$this->app['config']['logging.channels.console-logg'] = ['driver' => 'console-logg'];
29+
30+
if ($this->app->runningInConsole() === false) {
31+
$this->app->resolving(
32+
LogManager::class,
33+
static function (LogManager $logManager) {
34+
$logManager->extend(
35+
'console-logg',
36+
function () {
37+
return new NonConsole();
38+
}
39+
);
40+
}
41+
);
42+
2843
return;
2944
}
3045

3146
$this->app->singleton(LogOutputBindedInterface::class, LogOutputBinder::class);
3247
$this->app->singleton(LogManagerResolverListenerInterface::class, LogManagerResolverListener::class);
3348

34-
// sorry for this hack :(
35-
$this->app['config']['logging.channels.console-logg'] = ['driver' => 'console-logg'];
36-
3749
$this->app->resolving(
3850
LogManager::class,
3951
Closure::fromCallable(

0 commit comments

Comments
 (0)