Use logdb/client, add support for UDP

This commit is contained in:
2025-09-06 01:39:45 +02:00
parent 826f35c1a1
commit 573af48438
2 changed files with 52 additions and 14 deletions

View File

@@ -16,6 +16,12 @@
],
"require": {
"monolog/monolog": "^3.9",
"symfony/http-client": "^7.3"
"logdb/client": "^0.1.0"
},
"repositories": {
"logdb": {
"type": "composer",
"url": "https://dev.noccylabs.info/api/packages/logdb/composer"
}
}
}

View File

@@ -2,6 +2,8 @@
namespace LogDb\Monolog;
use LogDb\Client\LogDbClient;
use LogDb\Client\LogEvent;
use Monolog\Handler\AbstractProcessingHandler;
use Monolog\Handler\HandlerInterface;
use Monolog\Level;
@@ -11,12 +13,14 @@ use Symfony\Contracts\HttpClient\HttpClientInterface;
class LogDbHandler extends AbstractProcessingHandler
{
private HttpClientInterface $client;
//private HttpClientInterface $client;
private bool $batching = false;
private array $batched = [];
private LogDbClient $client;
public function __construct(
private readonly string $serverUrl,
private readonly ?string $scope = null,
@@ -26,7 +30,24 @@ class LogDbHandler extends AbstractProcessingHandler
)
{
parent::__construct($level, $bubble);
$this->client = HttpClient::createForBaseUri($this->serverUrl);
//$this->client = HttpClient::createForBaseUri($this->serverUrl);
if (!str_contains($serverUrl, "://")) {
$proto = 'http';
$server = $serverUrl;
} else {
[$proto,$server] = explode("://", $serverUrl, 2);
}
switch ($proto) {
case 'http':
case 'https':
$this->client = new LogDbClient("{$proto}://{$server}", "http");
break;
case 'udp':
$this->client = new LogDbClient($server, "udp");
break;
}
}
public function handleBatch(array $records): void
@@ -39,7 +60,7 @@ class LogDbHandler extends AbstractProcessingHandler
protected function write(LogRecord $record): void
{
$event = [
/*$event = [
'source' => $this->source,
'scope' => $this->scope,
'date' => $record->datetime->format('Y-m-d H:i:s P'),
@@ -47,7 +68,16 @@ class LogDbHandler extends AbstractProcessingHandler
'brief' => $record->message,
'detail' => $record->formatted,
'context' => $record->context,
];
];*/
$event = new LogEvent(
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[] = $event;
@@ -55,10 +85,11 @@ class LogDbHandler extends AbstractProcessingHandler
}
try {
$response = $this->client->request('POST', '/api/logdb/v1/create-event', [
'json' => $event
]);
$response->getContent(true);
$this->client->logEvent($event);
//$response = $this->client->request('POST', '/api/logdb/v1/create-event', [
// 'json' => $event
//]);
//$response->getContent(true);
} catch (\Exception $e) {
// Silent fault.
}
@@ -67,13 +98,14 @@ class LogDbHandler extends AbstractProcessingHandler
private function commit(): void
{
try {
$response = $this->client->request('POST', '/api/logdb/v1/create-event', [
'json' => $this->batched
]);
$response->getContent(true);
$this->client->logEventBatch($this->batched);
//$response = $this->client->request('POST', '/api/logdb/v1/create-event', [
// 'json' => $this->batched
//]);
//$response->getContent(true);
} finally {
$this->batched = [];
}
}
}
}