Initial commit
This commit is contained in:
75
src/LogDbHandler.php
Normal file
75
src/LogDbHandler.php
Normal file
@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
namespace LogDb\Monolog;
|
||||
|
||||
use Monolog\Handler\AbstractProcessingHandler;
|
||||
use Monolog\Handler\HandlerInterface;
|
||||
use Monolog\LogRecord;
|
||||
use Symfony\Component\HttpClient\HttpClient;
|
||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||
|
||||
class LogDbHandler extends AbstractProcessingHandler
|
||||
{
|
||||
private HttpClientInterface $client;
|
||||
|
||||
private bool $batching = false;
|
||||
|
||||
private array $batched = [];
|
||||
|
||||
public function __construct(
|
||||
private readonly string $serverUrl,
|
||||
private readonly ?string $scope = null,
|
||||
private readonly ?string $source = null,
|
||||
)
|
||||
{
|
||||
$this->client = HttpClient::createForBaseUri($this->serverUrl);
|
||||
}
|
||||
|
||||
public function handleBatch(array $records): void
|
||||
{
|
||||
$this->batching = true;
|
||||
parent::handleBatch($records);
|
||||
$this->batching = false;
|
||||
$this->commit();
|
||||
}
|
||||
|
||||
protected function write(LogRecord $record): void
|
||||
{
|
||||
$event = [
|
||||
'source' => $this->source,
|
||||
'scope' => $this->scope,
|
||||
'date' => $record->datetime->format('Y-m-d H:i:s P'),
|
||||
'level' => $record->level->toPsrLogLevel(),
|
||||
'brief' => $record->message,
|
||||
'detail' => $record->formatted,
|
||||
'context' => $record->context,
|
||||
];
|
||||
|
||||
if ($this->batching) {
|
||||
$this->batched[] = $record;
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
$response = $this->client->request('POST', '/api/logdb/v1/create-event', [
|
||||
'json' => $event
|
||||
]);
|
||||
$response->getContent(true);
|
||||
} catch (\Exception $e) {
|
||||
// Silent fault.
|
||||
}
|
||||
}
|
||||
|
||||
private function commit(): void
|
||||
{
|
||||
try {
|
||||
$response = $this->client->request('POST', '/api/logdb/v1/create-event', [
|
||||
'json' => $this->batched
|
||||
]);
|
||||
$response->getContent(true);
|
||||
} finally {
|
||||
$this->batched = [];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user