2022-10-17 21:25:03 +02:00
|
|
|
<?php declare(strict_types=1);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This file is part of the Monolog package.
|
|
|
|
*
|
|
|
|
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
|
|
|
*
|
|
|
|
* For the full copyright and license information, please view the LICENSE
|
|
|
|
* file that was distributed with this source code.
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace Monolog\Handler;
|
|
|
|
|
|
|
|
use Throwable;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Forwards records to at most one handler
|
|
|
|
*
|
|
|
|
* If a handler fails, the exception is suppressed and the record is forwarded to the next handler.
|
|
|
|
*
|
|
|
|
* As soon as one handler handles a record successfully, the handling stops there.
|
2023-07-02 23:57:24 +02:00
|
|
|
*
|
|
|
|
* @phpstan-import-type Record from \Monolog\Logger
|
2022-10-17 21:25:03 +02:00
|
|
|
*/
|
|
|
|
class FallbackGroupHandler extends GroupHandler
|
|
|
|
{
|
|
|
|
/**
|
2023-07-02 23:57:24 +02:00
|
|
|
* {@inheritDoc}
|
2022-10-17 21:25:03 +02:00
|
|
|
*/
|
2023-07-02 23:57:24 +02:00
|
|
|
public function handle(array $record): bool
|
2022-10-17 21:25:03 +02:00
|
|
|
{
|
2023-07-02 23:57:24 +02:00
|
|
|
if ($this->processors) {
|
|
|
|
/** @var Record $record */
|
2022-10-17 21:25:03 +02:00
|
|
|
$record = $this->processRecord($record);
|
|
|
|
}
|
|
|
|
foreach ($this->handlers as $handler) {
|
|
|
|
try {
|
|
|
|
$handler->handle($record);
|
|
|
|
break;
|
|
|
|
} catch (Throwable $e) {
|
|
|
|
// What throwable?
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false === $this->bubble;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2023-07-02 23:57:24 +02:00
|
|
|
* {@inheritDoc}
|
2022-10-17 21:25:03 +02:00
|
|
|
*/
|
|
|
|
public function handleBatch(array $records): void
|
|
|
|
{
|
2023-07-02 23:57:24 +02:00
|
|
|
if ($this->processors) {
|
2022-10-17 21:25:03 +02:00
|
|
|
$processed = [];
|
|
|
|
foreach ($records as $record) {
|
|
|
|
$processed[] = $this->processRecord($record);
|
|
|
|
}
|
2023-07-02 23:57:24 +02:00
|
|
|
/** @var Record[] $records */
|
2022-10-17 21:25:03 +02:00
|
|
|
$records = $processed;
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($this->handlers as $handler) {
|
|
|
|
try {
|
|
|
|
$handler->handleBatch($records);
|
|
|
|
break;
|
|
|
|
} catch (Throwable $e) {
|
|
|
|
// What throwable?
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|