chore: complete update
This commit is contained in:
79
src/Framework/Logging/ProcessorManager.php
Normal file
79
src/Framework/Logging/ProcessorManager.php
Normal file
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Framework\Logging;
|
||||
|
||||
/**
|
||||
* Verwaltet die Log-Processors und wendet sie auf Log-Records an.
|
||||
*/
|
||||
final readonly class ProcessorManager
|
||||
{
|
||||
/** @var array<LogProcessor> Liste der Processors, sortiert nach Priorität */
|
||||
private array $processors;
|
||||
|
||||
public function __construct(LogProcessor ...$processors)
|
||||
{
|
||||
$this->processors = $processors;
|
||||
}
|
||||
|
||||
public function addProcessor(LogProcessor $processor): self
|
||||
{
|
||||
$processors = $this->sortProcessors($processor, ...$this->processors);
|
||||
|
||||
return new self(...$processors);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wendet alle Processors auf einen Log-Record an
|
||||
*/
|
||||
public function processRecord(LogRecord $record): LogRecord
|
||||
{
|
||||
foreach ($this->processors as $processor) {
|
||||
$record = $processor->processRecord($record);
|
||||
}
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sortiert die Processors nach Priorität (höhere Priorität = frühere Ausführung)
|
||||
*/
|
||||
private function sortProcessors(): array
|
||||
{
|
||||
$processors = $this->processors;
|
||||
|
||||
usort($processors, function (LogProcessor $a, LogProcessor $b) {
|
||||
return $b->getPriority() <=> $a->getPriority(); // Absteigend sortieren
|
||||
});
|
||||
|
||||
return $processors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt alle registrierten Processors zurück
|
||||
*
|
||||
* @return array<string, int> Array mit Processor-Namen als Schlüssel und Prioritäten als Werte
|
||||
*/
|
||||
public function getProcessorList(): array
|
||||
{
|
||||
$result = [];
|
||||
|
||||
foreach ($this->processors as $processor) {
|
||||
$result[$processor->getName()] = $processor->getPriority();
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function hasProcessor(string $name): bool
|
||||
{
|
||||
return array_any($this->processors, fn($processor) => $processor->getName() === $name);
|
||||
|
||||
}
|
||||
|
||||
public function getProcessor(string $name): ?LogProcessor
|
||||
{
|
||||
return array_find($this->processors, fn($processor) => $processor->getName() === $name);
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user