0

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,
        ],
    ```
ODelibalta
  • 2,194
  • 1
  • 18
  • 28

0 Answers0