Contao-Camp 2024
Ergebnis 1 bis 5 von 5

Thema: Logs-Einträge in DB automatisch leeren

  1. #1
    Contao-Nutzer
    Registriert seit
    17.12.2020.
    Beiträge
    11

    Frage Logs-Einträge in DB automatisch leeren

    Hallo,

    ist es möglich, automatisiert (via Cronjob) Log-Einträge in die tl_logs zu löschen?
    Einträge, welche älter als 1 Monat sind, sind nur noch begrenzt relevant, jedoch wird die Tabelle tl_logs immer größer. Manuell kann ich die Tabelke im BE unter Systemwartung machen - ein Cronjob der 1x/Tag läuft wäre mir lieber.

    Gibt es da schon etwas?


    VG

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    Standard

    Die Einträge im System Log werden automatisch nach der in contao.localconfig.logPeriod eingestellten Zeit gelöscht. Die Standardeinstellung ist 7 Tage.

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    Standard

    Allerdings sehe ich gerade, dass die Löschung nur erfolgt, wenn man im Backend das System Log anzeigen lässt. Es wird nicht per Cronjob automatisch gelöscht.

  4. #4
    Contao-Nutzer
    Registriert seit
    17.12.2020.
    Beiträge
    11

    Daumen hoch

    Ich verstehe ja den Hintergrund jedoch muss man somit doch händisch im Backend die System-Logs anschauen um das Löschen zu veranlassen. Dann kann man auch gleich unter Systemwartung Logs löschen.

    Danke, Spooky. Reicht mir soweit.

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    Standard

    Du könntest folgenden Cronjob definieren:
    PHP-Code:
    // src/Cron/TrimSystemLogCron.php
    namespace App\Cron;

    use 
    Contao\Config;
    use 
    Contao\CoreBundle\Cron\Cron;
    use 
    Contao\CoreBundle\Framework\ContaoFramework;
    use 
    Doctrine\DBAL\Connection;

    /**
     * @Cron("hourly")
     */
    class TrimSystemLogCron
    {
        private 
    $framework;
        private 
    $db;

        public function 
    __construct(ContaoFramework $frameworkConnection $db)
        {
            
    $this->framework $framework;
            
    $this->db $db;
        }

        public function 
    __invoke()
        {
            
    $this->framework->initialize();
            
            
    $logPeriod = (int) Config::get('logPeriod');
            
            if (
    $logPeriod <= 0) {
                return;
            }

            
    $this->db->executeQuery("DELETE FROM tl_log WHERE tstamp < ?", [time() - $logPeriod]);
        }

    Das löscht veraltete Einträge stündlich aus dem System Log. Statt "hourly" kannst du auch "minutely" oder eine Cron Expression benutzen, um das Interval zu ändern.
    Geändert von Spooky (23.12.2020 um 10:35 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •