I have that code: app/Logging/ElasticsearchLogger.php
<?php
namespace App\Logging;
use Elasticsearch\ClientBuilder;
use Monolog\Handler\AbstractProcessingHandler;
class ElasticsearchLogger extends AbstractProcessingHandler
{
protected $client;
public function __construct(array $config)
{
parent::__construct();
$this->client = ClientBuilder::create()
->setHosts([
[
'host' => $config['elasticsearch_host'],
'port' => $config['elasticsearch_port'],
]
])
->build();
}
protected function write(array $record): void
{
$params = [
'index' => $record['channel'],
'type' => 'logs',
'body' => [
'timestamp' => $record['datetime']->format('Y-m-d H:i:s'),
'level' => $record['level_name'],
'message' => $record['message'],
],
];
$this->client->index($params);
}
}
and config/logging.php
...
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single'],
'ignore_exceptions' => false,
],
...
'emergency' => [
'path' => storage_path('logs/laravel.log'),
],
'elasticsearch' => [
'driver' => 'custom',
'via' => App\Logging\ElasticsearchLogger::class,
'elasticsearch_host' => env('ELASTICSEARCH_HOST'),
'elasticsearch_port' => env('ELASTICSEARCH_PORT'),
'elasticsearch_index' => 'max_log',
],
],
];
Code that logs
public function toElastic($request)
{
Log::channel('elasticsearch')->info($request);
return true;
}
Sample $request:
array:5 [
"status" => "success"
"login" => "000"
"timestamp" => "2024-02-23 06:50:07"
"jwt" => "xxx.xxx"
"url" => "http://localhost:9999/api/complete/xxx/id2?grant_type=jwt&code=xxx"
]
And error: Declaration of App\Logging\ElasticsearchLogger::write(array $record): void must be compatible with Monolog\Handler\AbstractProcessingHandler::write(Monolog\LogRecord $record): void
I have tried also:
<?php
namespace App\Logging;
use Monolog\Handler\AbstractProcessingHandler;
use Monolog\Logger;
use Monolog\Record\Record;
class ElasticsearchLogger extends AbstractProcessingHandler
{
protected $client;
public function __construct(array $config)
{
parent::__construct(Logger::DEBUG);
$this->client = ClientBuilder::create()
->setHosts([
[
'host' => $config['elasticsearch_host'],
'port' => $config['elasticsearch_port'],
]
])
->build();
}
protected function write(Record $record): void
{
$this->client->index([
'index' => $record->getChannel(),
'type' => 'logs',
'body' => [
'timestamp' => $record->getDatetime()->format('Y-m-d H:i:s'),
'level' => $record->getLevelName(),
'message' => $record->getMessage(),
],
]);
}
}