I want to be able to do the following statement
Log::channel('database')->category('asdasd')->info('This will be logged to the database.');
and I have it so that it inserts the message to the logs table if I take out the ->category()
part of it.
I have a category
column in my logs
table and I want to insert the passed in string as the row's value for that column. I keep getting Call to undefined method Monolog\Logger::category()
error. I am not sure what to do at this point. I'd really appreciate some help. ty
<?php
namespace App\Logger;
use Monolog\Logger;
use App\Logger\DatabaseLogHandler;
use Monolog\Processor\GitProcessor;
use Monolog\Processor\WebProcessor;
use Monolog\Processor\ProcessIdProcessor;
use Monolog\Processor\MemoryUsageProcessor;
use Monolog\Processor\MemoryPeakUsageProcessor;
class DatabaseLogger extends Logger
{
protected $category;
public function category(string $category)
{
$this->category = $category;
return $this;
}
/**
* Create a custom Monolog instance.
*/
public function __invoke(array $config): Logger
{
$logger = new self('database');
$logger->pushHandler(new DatabaseLogHandler());
$logger->pushProcessor(new WebProcessor());
$logger->pushProcessor(new GitProcessor());
$logger->pushProcessor(new ProcessIdProcessor());
$logger->pushProcessor(new MemoryUsageProcessor());
$logger->pushProcessor(new MemoryPeakUsageProcessor());
return $logger;
}
}
<?php
namespace App\Logger;
use Monolog\Level;
use Monolog\Handler\AbstractProcessingHandler;
use Monolog\LogRecord;
use App\Models\Log;
class DatabaseLogHandler extends AbstractProcessingHandler
{
public function __construct(int|string|Level $level = Level::Debug, bool $bubble = true)
{
parent::__construct($level, $bubble);
}
protected function write($record): void
{
$record = is_array($record) ? $record : $record->toArray();
Log::create([
'level' => $record['level_name'],
'message' => $record['message'],
'context' => $record['context'] ? json_encode($record['context']) : null,
'extra' => $record['extra'] ? json_encode($record['extra']) : null,
]);
}
}
'database' => [
'driver' => 'custom',
'via' => App\Logger\DatabaseLogger::class,
],
```