Laravel-Protokolldatei basierend auf dem Datum

Lesezeit: 4 Minuten

Standardmäßig speichert Laravel die Protokolldatei in einer einzigen Protokolldatei namens laravel.log, die sich in befindet /storage/logs/laravel.log

Meine Frage ist, wie ich jeden Tag eine neue Protokolldatei erhalten und die Protokolldateien wie speichern kann /storage/logs/laravel-2016-02-23.log für das aktuelle datum, also muss ich jeden tag ein neues logfile abspeichern /storage/logs/

Ich denke, wir können das tun, indem wir die Standardeinstellung erweitern Illuminate\Foundation\Bootstrap\ConfigureLogging Bootstraper-Klasse, aber ich bin mir nicht sicher, wie ich das machen kann

ich würde es wirklich schätzen, wenn mir jemand helfen könnte.

Danke im Voraus.

In der Fassung von Laravel 5.6 die ich verwende, ist die Konfigurationsdatei für die Protokollierung config/logging.php

Dort finden Sie den folgenden Abschnitt

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['single'],
    ],

    'single' => [
        'driver' => 'single',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
    ],

    'daily' => [
        'driver' => 'daily',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
        'days' => 7,
    ],
    ...
]

Ändere die Zeile

'channels' => ['single'],

hinein

'channels' => ['daily'],

Dann wird es so sein:

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['daily'],
    ],

    'single' => [
        'driver' => 'single',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
    ],

    'daily' => [
        'driver' => 'daily',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
        'days' => 7,
    ],
    ...
]

Es erstellt Protokolldateien für jeden Tag im Format laravel-2018-08-13.log im log-Verzeichnis. Das Protokollverzeichnis wird wie folgt aussehen

Bisher
Geben Sie hier die Bildbeschreibung ein

Nach dem Anwenden der Rotationskonfiguration In dem Verzeichnis wird die Protokolldatei für das aktuelle Datum erstellt (als eingekreiste Datei, die für heute erstellt wird 2018-08-13).
Geben Sie hier die Bildbeschreibung ein

  • Das stack Treiber macht es möglich, mehrere Treiber gleichzeitig zu verwenden. Wenn Sie das nicht benötigen, können Sie einfach die Standardeinstellung auf setzen daily Anstatt von stack. Sie können dies tun, indem Sie es in Ihrem einstellen .env Datei als LOG_CHANNEL=daily

    – Mathias S

    27. Mai 2020 um 11:49 Uhr


  • Denken Sie daran, dass die daily Der Treiber löscht die Protokolle nach der unter eingestellten Anzahl von Tagen days Schlüssel . Um sie für immer zu behalten, stellen Sie sie einfach auf ein 0.

    – totymedli

    7. September 2020 um 15:53 ​​Uhr

  • funktioniert nicht, ich habe seit vielen Tagen ‘default’ => env(‘LOG_CHANNEL’, ‘daily’) eingestellt, aber funktioniert nicht. einzelne Datei laravel.log wird generiert.

    – pankaj kumar

    25. Oktober 2020 um 10:24 Uhr


  • @totymedli aus Neugier, wo man Details in Laravel-Dokumenten finden kann, die besagen, dass die Protokolle nicht gelöscht werden, wenn wir 0 auf Tage setzen. Es fällt mir schwer herauszufinden, welche Params-Kanäle unterstützt werden und was sie tun. Ich kann es in Laravel-Dokumenten nicht finden.

    – DS9

    5. Februar 2021 um 13:24 Uhr

  • @DS9 Suchen Sie einfach nach daily im Framework-Quellcode. Im LogManager Sie übergeben den Wert an Monolog RotatingFileHandler wo der Wert überprüft wird und wenn ja 0 Der GC ist ausgeschaltet.

    – totymedli

    5. Februar 2021 um 21:30 Uhr


Benutzeravatar von Tim Lewis
Tim Lewis

Es ist eigentlich viel einfacher als das. In deiner config/app.php Sie sehen die Zeile:

'log' => 'single',

näher am Ende der Datei. Laravel verwendet standardmäßig die single -Methode, die alle Fehler in einer einzigen, expandierenden Datei speichert. Wenn Sie diese Zeile ändern in:

'log' => 'daily',

Es wird Laravel mitteilen, dass Sie mehrere Protokolle bevorzugen, denen jeweils das Datum des Auftretens des Fehlers angehängt ist.

Es gibt noch ein paar andere Methoden, also schauen Sie sich unbedingt die an amtliche Dokumentation Für mehr Information.


Diese Antwort gilt für Laravel 5.2, die in der ursprünglichen Frage angegebene Version. In Never-Versionen von Laravel wurde die Protokollierungskonfiguration in eine eigene Konfigurationsdatei verschoben, wie aus der Antwort von @ShanthaKumara hervorgeht (https://stackoverflow.com/a/51816907/3965631). Bitte schlagen Sie keine Änderungen vor, um diese Antwort an die neue Version anzupassen.

Benutzeravatar von Anjani Barnwal
Anjani Barnwal

Öffnen Sie einfach die .env-Datei und ändern Sie sie

LOG_CHANNEL=stack

zu

LOG_CHANNEL=daily

Führen Sie dann den Befehl aus

php artisan config:cache

Jetzt denke ich, dass Ihr Problem gelöst wird.

Das Laravel bei der täglichen Protokollierung ist in Ordnung, aber im 1. Jahr haben Sie 365 Dateien von laravel.log. Mein Ansatz ist, Folgendes auf dem zu tun 'path' des 'single' Kanal.

storage_path('logs/' . date("Y") . "https://stackoverflow.com/" . date("m") . "https://stackoverflow.com/" . date("d") . "https://stackoverflow.com/" . 'laravel.log')

Auf diese Weise haben Sie die Protokolle nach Jahr/Monat/Tag organisiert.

  • 2021/
    • 06/
      • 01/
        • laravel.log

Um eine neue Datei für jeden Tag in Laravel zu generieren, müssen Sie lediglich den Wert „channels“ in der Datei \config\logging.php von „single“ auf „daily“ ändern.

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['daily'],
        'ignore_exceptions' => false,
    ], 

1405290cookie-checkLaravel-Protokolldatei basierend auf dem Datum

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy