Con este post crearemos un fichero con cada correo enviado por nuestro sistema para poder analizar el contenido de los mismos.
El post anterior sobre debug en Laravel es https://dev.to/lito/como-generar-logs-que-registren-las-consultas-a-base-de-datos-en-laravel-5edl
1. Creamos el Logger de Mail
Lo podemos dar de alta por ejemplo en app/Services/Mail/Logger.php
:
<?php declare(strict_types=1);
namespace App\Services\Mail;
use Illuminate\Mail\Events\MessageSending;
use Illuminate\Support\Facades\Event;
class Logger
{
/**
* @return void
*/
public static function listen(): void
{
Event::listen(MessageSending::class, static fn ($event) => static::store($event));
}
/**
* @param \Illuminate\Mail\Events\MessageSending $event
*
* @return void
*/
protected static function store(MessageSending $event): void
{
$file = storage_path('logs/mails/'.date('Y-m-d/H-i-s').'-'.uniqid().'.log');
$dir = dirname($file);
if (is_dir($dir) === false) {
mkdir($dir, 0755, true);
}
file_put_contents($file, (string)$event->message);
}
}
Ahora podemos crear un ServiceProvider
que gestione el debug. Lo haremos en app/Providers/Debug.php
:
<?php declare(strict_types=1);
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\Mail\Logger as LoggerMail;
class Debug extends ServiceProvider
{
/**
* @return void
*/
public function boot()
{
$this->logging();
}
/**
* @return void
*/
protected function logging(): void
{
$this->loggingMail();
}
/**
* @return void
*/
protected function loggingMail(): void
{
if (config('logging.channels.mail.enabled')) {
LoggerMail::listen();
}
}
}
Una vez tengamos el servicio, lo añadimos en config/app.php
en el array de providers
:
...
'providers' => [
...
/*
* Application Service Providers...
*/
App\Providers\Debug::class,
],
];
También añadimos su opción de configuración en config/logging.php
:
...
'channels' => [
...
'mail' => [
'enabled' => env('LOG_MAIL', false),
],
],
Y lo completamos con el valor en .env
:
LOG_MAIL=true
De este modo nos creará una carpeta en storage/logs/mails/
con cada día y dentro un fichero cada correo ordenados por hora.
El código completo lo podeis encontrar aquí https://gist.github.com/eusonlito/773bd0ef3de74ba998e0fb6f8cc42d9a
Y ya sabes, si te ha parecido interesante, comparte!
Top comments (0)