Skip to content

Commit

Permalink
[4.x] Allows to specify the log level (#1312)
Browse files Browse the repository at this point in the history
* Allows to specify log level

* Apply fixes from StyleCI

* Update src/Watchers/LogWatcher.php

Co-authored-by: Dries Vints <[email protected]>

* Update LogWatcher.php

* formatting

---------

Co-authored-by: StyleCI Bot <[email protected]>
Co-authored-by: Taylor Otwell <[email protected]>
Co-authored-by: Dries Vints <[email protected]>
  • Loading branch information
4 people authored Feb 21, 2023
1 parent 4ed1f6c commit fafad2e
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 5 deletions.
7 changes: 6 additions & 1 deletion config/telescope.php
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,12 @@
],

Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true),
Watchers\LogWatcher::class => env('TELESCOPE_LOG_WATCHER', true),

Watchers\LogWatcher::class => [
'enabled' => env('TELESCOPE_LOG_WATCHER', true),
'level' => 'error',
],

Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true),

Watchers\ModelWatcher::class => [
Expand Down
28 changes: 26 additions & 2 deletions src/Watchers/LogWatcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,25 @@
use Illuminate\Support\Arr;
use Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;
use Psr\Log\LogLevel;
use Throwable;

class LogWatcher extends Watcher
{
/**
* The available log level priorities.
*/
private const PRIORITIES = [
LogLevel::DEBUG => 100,
LogLevel::INFO => 200,
LogLevel::NOTICE => 250,
LogLevel::WARNING => 300,
LogLevel::ERROR => 400,
LogLevel::CRITICAL => 500,
LogLevel::ALERT => 550,
LogLevel::EMERGENCY => 600,
];

/**
* Register the watcher.
*
Expand Down Expand Up @@ -61,7 +76,16 @@ private function tags($event)
*/
private function shouldIgnore($event)
{
return isset($event->context['exception']) &&
$event->context['exception'] instanceof Throwable;
if (isset($event->context['exception']) && $event->context['exception'] instanceof Throwable) {
return true;
}

$minimumTelescopeLogLevel = static::PRIORITIES[$this->options['level'] ?? 'debug']
?? static::PRIORITIES[LogLevel::DEBUG];

$eventLogLevel = static::PRIORITIES[$event->level]
?? static::PRIORITIES[LogLevel::DEBUG];

return $eventLogLevel < $minimumTelescopeLogLevel;
}
}
101 changes: 99 additions & 2 deletions tests/Watchers/LogWatcherTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,25 @@ protected function getEnvironmentSetUp($app)

$app->get('config')->set('logging.default', 'syslog');

$config = match ($this->getName(false)) {
'test_log_watcher_registers_entry_for_any_level_by_default' => true,
'test_log_watcher_only_registers_entries_for_the_specified_error_level_priority' => [
'enabled' => true,
'level' => 'error',
],
'test_log_watcher_only_registers_entries_for_the_specified_debug_level_priority' => [
'level' => 'debug',
],
'test_log_watcher_do_not_registers_entry_when_disabled_on_the_boolean_format' => false,
'test_log_watcher_do_not_registers_entry_when_disabled_on_the_array_format' => [
'enabled' => false,
'level' => 'error',
],
'test_log_watcher_registers_entry_with_exception_key' => true,
};

$app->get('config')->set('telescope.watchers', [
LogWatcher::class => true,
LogWatcher::class => $config,
]);
}

Expand All @@ -38,7 +55,53 @@ public function logLevelProvider()
/**
* @dataProvider logLevelProvider
*/
public function test_log_watcher_registers_entry_for_any_level($level)
public function test_log_watcher_registers_entry_for_any_level_by_default($level)
{
$logger = $this->app->get(LoggerInterface::class);

$logger->$level("Logging Level [$level].", [
'user' => 'Claire Redfield',
'role' => 'Zombie Hunter',
]);

$entry = $this->loadTelescopeEntries()->first();

$this->assertSame(EntryType::LOG, $entry->type);
$this->assertSame($level, $entry->content['level']);
$this->assertSame("Logging Level [$level].", $entry->content['message']);
$this->assertSame('Claire Redfield', $entry->content['context']['user']);
$this->assertSame('Zombie Hunter', $entry->content['context']['role']);
}

/**
* @dataProvider logLevelProvider
*/
public function test_log_watcher_only_registers_entries_for_the_specified_error_level_priority($level)
{
$logger = $this->app->get(LoggerInterface::class);

$logger->$level("Logging Level [$level].", [
'user' => 'Claire Redfield',
'role' => 'Zombie Hunter',
]);

$entry = $this->loadTelescopeEntries()->first();

if (in_array($level, [LogLevel::EMERGENCY, LogLevel::ALERT, LogLevel::CRITICAL, LogLevel::ERROR])) {
$this->assertSame(EntryType::LOG, $entry->type);
$this->assertSame($level, $entry->content['level']);
$this->assertSame("Logging Level [$level].", $entry->content['message']);
$this->assertSame('Claire Redfield', $entry->content['context']['user']);
$this->assertSame('Zombie Hunter', $entry->content['context']['role']);
} else {
$this->assertNull($entry);
}
}

/**
* @dataProvider logLevelProvider
*/
public function test_log_watcher_only_registers_entries_for_the_specified_debug_level_priority($level)
{
$logger = $this->app->get(LoggerInterface::class);

Expand All @@ -56,6 +119,40 @@ public function test_log_watcher_registers_entry_for_any_level($level)
$this->assertSame('Zombie Hunter', $entry->content['context']['role']);
}

/**
* @dataProvider logLevelProvider
*/
public function test_log_watcher_do_not_registers_entry_when_disabled_on_the_boolean_format($level)
{
$logger = $this->app->get(LoggerInterface::class);

$logger->$level("Logging Level [$level].", [
'user' => 'Claire Redfield',
'role' => 'Zombie Hunter',
]);

$entry = $this->loadTelescopeEntries()->first();

$this->assertNull($entry);
}

/**
* @dataProvider logLevelProvider
*/
public function test_log_watcher_do_not_registers_entry_when_disabled_on_the_array_format($level)
{
$logger = $this->app->get(LoggerInterface::class);

$logger->$level("Logging Level [$level].", [
'user' => 'Claire Redfield',
'role' => 'Zombie Hunter',
]);

$entry = $this->loadTelescopeEntries()->first();

$this->assertNull($entry);
}

public function test_log_watcher_registers_entry_with_exception_key()
{
$logger = $this->app->get(LoggerInterface::class);
Expand Down

0 comments on commit fafad2e

Please sign in to comment.