Debug Logger (Entwickler Bundle)

"swoopde/contao-debug-logger-bundle": "^1.0"

Funktionen

  • eine zentrale Debug-Konfiguration pro registrierter Source
  • Einstellungen vollständig im Contao-Backend
  • Debugging pro Source aktivierbar
  • Credentials können bewusst unmaskiert geloggt werden (`debugCredentials`)
  • File-Logging mit frei einstellbarem Dateipfad
  • Datenbank-Logging
  • File + Datenbank gleichzeitig
  • Maskierungswörter: ein Begriff pro Zeile
  • Maskierungswerte: ein konkreter Wert pro Zeile
  • Maskierungswerte werden mit AES-256-GCM verschlüsselt gespeichert
  • zentrale Datenbank-Logansicht als Contao-Child-Tabelle
  • der **Logs**-Button wird nur angezeigt, wenn DB-Logging für die Source aktiv ist
  • Fehlerhinweis im Backend, wenn `kernel.secret` / `APP_SECRET` geändert wurde und gespeicherte Maskierungswerte nicht mehr entschlüsselt werden können
  • fail-safe: bei nicht entschlüsselbaren Maskierungswerten wird für die betreffende Source nichts geloggt, solange `Credentials loggen` deaktiviert ist

füge in deinem Bundle hinzu:

composer.json

"require": {
  "swoopde/contao-debug-logger-bundle": "^1.0"
}

Source setzen und optional Defaultwerte

neue Datei anlegen in deinem Bundle

src/Debug/<YOURBUNDLE>DebugSource.php

wenn du vordefinierte Werte im BE haben möchtest.

<?php

declare(strict_types=1);
//Ein Beispiel
namespace Swoop\ContaoTelegramSupportBundle\Debug;

use Swoop\ContaoDebugLoggerBundle\Contract\MaskValuesProviderInterface;
use Swoop\ContaoDebugLoggerBundle\Contract\SensitiveWordsProviderInterface;

final class TelegramDebugDefaults implements SensitiveWordsProviderInterface, MaskValuesProviderInterface {
    public function getSourceName(): string {
        return TelegramDebugSource::NAME;
    }

    public function getDefaultSensitiveWords(): array {
        return ['token', 'botToken', 'webhookSecret', 'secret', 'authorization', 'password',];
    }


    public function getDefaultMaskValues(): array {
        /*
         * Hier zunächst nur statische Werte.
         *
         * Dynamische Werte wie der tatsächliche Bot-Token sollten
         * später über einen Value-Provider aus der TelegramConfiguration
         * geliefert werden.
         */
        return [];
    }
    
    public function getDefaultLogFile(): string {
        return 'var/logs/telegram.log';
    }
}
<?php

declare(strict_types=1);

namespace Swoop\<YOURBUNDLE>\Debug;

use Swoop\ContaoDebugLoggerBundle\Contract\MaskValuesProviderInterface;
use Swoop\ContaoDebugLoggerBundle\Contract\SensitiveWordsProviderInterface;

final class <YOURBUNDLE>DebugDefaults implements SensitiveWordsProviderInterface, MaskValuesProviderInterface {
    public function getSourceName(): string {
        return <YOURBUNDLE>DebugSource::NAME;
    }

    public function getDefaultSensitiveWords(): array {
        return []; //ohnne Defaultwerte
    }


    public function getDefaultMaskValues(): array {
        /*
         * Hier zunächst nur statische Werte.
         *
         * Dynamische Werte wie der tatsächliche Bot-Token sollten
         * später über einen Value-Provider aus der TelegramConfiguration
         * geliefert werden.
         */
        return [];
    }
    
    public function getDefaultLogFile(): string {
        return ''; //kann leer sein
    }
}

TelegramDebugSource wird durch autoconfigure: true in service.yaml automatisch erkannt.

Alternativ selber eintragen in service.yaml

yourVendor\YourBundle\Debug\TelegramDebugSource:
    tags:
        - { name: 'swoop.debug_source' }

Logger anwenden im Code

vorhger (Standart Logger):

$this->debug('Telegram API Request', [
    'method' => $method,
    'url' => $url,
    'payload' => $payload,
]);

debug-logger-bundle in Verwendung.  (Custom Logger mit Maskierung)

$this->debugLogger->debug(
    TelegramDebugSource::NAME,
    'Telegram API request',
    [
        'method' => $method,
        'url' => $url,
        'payload' => $payload,
    ],
);

in deinem dca im bundle noch dafür sorgen dass im BE auch der passende Abschnitt erzeugt und angezeigt wird:

use Swoop\ContaoDebugLoggerBundle\Registry\DebugLoggerRegistry;

DebugLoggerRegistry::register(
    'tl_swoop_telegram',
    'telegram',
);

//Weitere Beispiele
DebugLoggerRegistry::register('tl_swoop_telegram', 'telegram');
DebugLoggerRegistry::register('tl_swoop_sso', 'sso');
DebugLoggerRegistry::register('tl_irgendein_bundle', 'irgendwas');

Einstellungen

Telegram-Webhook konnte nicht registriert werden: Bad Request: bad webhook: Failed to resolve host: Name or service not known

Dann ist https://xxxx.trycloudflare.com/telegram/webhook wahrscheinllich gerade nicht erreichbar.