Exclude Log Levels

This commit is contained in:
2025-10-23 12:21:31 +02:00
parent 5c1e81d86a
commit 0b8e72fb7b
2 changed files with 55 additions and 0 deletions

View File

@@ -8,4 +8,8 @@ return [
'timeout_ms' => env('LOGHANDLER_TIMEOUT_MS', 3000),
'retry_times' => env('LOGHANDLER_RETRY_TIMES', 0),
'include_trace' => env('LOGHANDLER_INCLUDE_TRACE', false),
'excluded_levels' => array_values(array_filter(array_map(
static fn (string $level): string => strtolower($level),
array_map('trim', explode(',', (string) env('LOGHANDLER_EXCLUDE_LEVELS', 'debug,info')))
))),
];

View File

@@ -6,8 +6,10 @@ use ErrorException;
use GuzzleHttp\ClientInterface;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Config\Repository;
use Monolog\Level;
use Monolog\LogRecord;
use Throwable;
use ValueError;
class LogForwarder
{
@@ -24,6 +26,12 @@ class LogForwarder
return;
}
$excludedLevels = $this->resolveExcludedLevels($settings);
if ($this->shouldExcludeLevel($record->level, $excludedLevels)) {
return;
}
$endpoint = (string) ($settings['endpoint'] ?? '');
$token = (string) ($settings['token'] ?? '');
@@ -141,4 +149,47 @@ class LogForwarder
return (string) ($record->context['trace'] ?? '');
}
/**
* @param array<string, mixed> $settings
* @return Level[]
*/
private function resolveExcludedLevels(array $settings): array
{
$levels = $settings['excluded_levels'] ?? [];
if (! is_array($levels)) {
$levels = [$levels];
}
$resolved = [];
foreach ($levels as $level) {
if (! is_string($level) || $level === '') {
continue;
}
try {
$resolved[] = Level::fromName($level);
} catch (ValueError) {
continue;
}
}
return $resolved;
}
/**
* @param Level[] $excludedLevels
*/
private function shouldExcludeLevel(Level $recordLevel, array $excludedLevels): bool
{
foreach ($excludedLevels as $level) {
if ($recordLevel === $level) {
return true;
}
}
return false;
}
}