monolog-logtail
monolog-logtail copied to clipboard
Question?. Strange behavior using Logtail in Queues with Laravel.
I am using Laravel 10 and for logs delivery I am using queues. The log system works fine, for example if I run it from a command, or a controller:
$logger = new Logger('mychannel);
$logger->pushHandler(new LogtailHandler('xxxx'));
$logger->info('message', $array_data);
To improve the user experience, I decided to use queues for log management:
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Monolog\Logger;
use Logtail\Monolog\LogtailHandler;
class LogJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*/
public function __construct(
public string $channel,
public string $level,
public string $message,
public array $data
) {
}
/**
* Execute the job.
*/
public function handle(): void
{
if ($this->channel == 'ychannel') {
$logger = new Logger($this->channel);
$logger->pushHandler(new LogtailHandler('dddd'));
}
if ($this->channel == 'xchanel') {
$logger = new Logger($this->channel);
$logger->pushHandler(new LogtailHandler('zxy'));
}
if ($this->level == 'INFO') {
$logger->info($this->message, $this->data);
}
if ($this->level == 'ERROR') {
$logger->error($this->message, $this->data);
}
if ($this->level == 'WARNING') {
$logger->warning($this->message, $this->data);
}
}
}
// dispatch a log on los queue
LogJob::dispatch('ychannel', 'INFO', 'User Added now',
['data' => ['email' => '[email protected]', 'country_id' => 456], ])->onQueue('log_queue');
The queue runs correctly, but the logs do not be delivered to the logtail server. Looking at how the queue works, it seems that the queue finishes the job first, before monolog finishes sending the log.
monolog-logtail 3.0
php 8.2
Laravel 10.x
Any tips on how to handle this situation?