mivita/app/Mail/MailLog.php
Kevin 7daebf32eb Logs: Kanal userabo ersetzt, Log-Mails ueber die Queue, weniger Rauschen
Log-Analyse 26.08. (P1-1, P2-1, P2-7, P2-8):
- MyLog schrieb in den nicht definierten Kanal userabo (109 EMERGENCY-
  Eintraege, laravel.log rotierte nicht mehr); jetzt abo_order.
- MyLog verschickt die Benachrichtigung ueber die Queue, ein Mailfehler
  bricht den Zahllauf nicht mehr ab. MailLog sammelt Nutzer, User-Agent
  und Zeit beim Erzeugen ein, weil der Worker keinen Request hat.
- Abgelehnte OAuth-Anfragen (falscher grant_type) werden als Warnung
  geloggt statt als Fehler gemailt.
- payments:check-accounts loggt je Berater nur noch auf debug und schreibt
  am Ende eine Zusammenfassung (geprueft, versendet, uebersprungen).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 15:41:06 +00:00

77 lines
2 KiB
PHP

<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class MailLog extends Mailable implements ShouldQueue
{
use Queueable, SerializesModels;
protected $channel;
protected $context;
protected $message;
protected $data;
/**
* Request-Kontext wird beim Erzeugen eingesammelt, nicht erst in build().
* Die Mail wird in die Queue gelegt und im Worker gibt es weder eine
* angemeldete Session noch den urspruenglichen Request.
*/
protected $origin;
protected $userAgent;
protected $occurredAt;
public $subject;
public function __construct($channel, $context, $message, $data)
{
$this->channel = $channel;
$this->context = $context;
$this->message = $message;
$this->data = $data;
$this->subject = 'mivita Log';
$this->origin = \Auth::check()
? \Auth::user()->id.' | '.\Auth::user()->email
: null;
$this->userAgent = request()->header('User-Agent');
$this->occurredAt = now()->format('d.m.Y H:i');
}
public function build()
{
$title = 'Log: '.$this->channel.' '.$this->context;
// make Data readable
$data = json_encode($this->data, JSON_PRETTY_PRINT);
$content = "\n";
$content .= 'Channel: '.$this->channel."\n";
$content .= 'Context: '.$this->context."\n";
if ($this->origin) {
$content .= 'From User: '.$this->origin."\n";
}
$content .= "\n";
$content .= 'Message: '.$this->message."\n";
$content .= "\n";
$content .= 'Data: '.$data."\n";
$content .= "\n";
$content .= "\n";
$content .= 'Time: '.$this->occurredAt;
$content .= "\n";
$content .= $this->userAgent;
return $this->view('emails.sys')->with([
'title' => $title,
'content' => $content,
]);
}
}