Protokoll


Protokoll

    Einführung
  • Konfigurieren
    • Protokollstapel erstellen
  • Protokoll schreiben Nachricht
    • wird in den angegebenen Kanal geschrieben
  • erweitert Anpassung des Monolog-Protokollkanals
    • Benutzerdefinierter Monolog-Kanal
    • Monolog erstellen Kanäle verwalten
    • Kanäle über Fabrik erstellen

Einführung

Damit Sie besser verstehen, was in Ihrer Anwendung passiert, bietet Laravel einen leistungsstarken Protokollierungsdienst, mit dem Sie Protokollnachrichten und Systemfehlerprotokolle in Dateien aufzeichnen und sogar Slack-Benachrichtigungen für Ihre Anwendung verwenden können gesamtes Team.

Im Laravel-Framework verwendet Laravel die Monolog-Bibliothek, die Unterstützung für eine Vielzahl leistungsstarker Protokollverarbeitung bietet. Mit Laravel können Sie diese Handler einfach konfigurieren, sodass Sie sie für die benutzerdefinierte Verarbeitung von Anwendungsprotokollen kombinieren können.

Konfiguration

Die gesamte Konfiguration des Anwendungsprotokollierungssystems befindet sich in der Konfigurationsdatei config/logging.php. Mit dieser Datei können Sie Ihre Anwendungsprotokollkanäle konfigurieren. Überprüfen Sie daher unbedingt jeden verfügbaren Kanal und seine Optionen. Natürlich gehen wir im Folgenden auf einige der häufig verwendeten Optionen ein.

Standardmäßig verwendet Laravel stack zum Protokollieren von Nachrichten. Der Stack-Kanal wird verwendet, um mehrere Protokollkanäle in einem einzigen Kanal zusammenzufassen. Weitere Informationen zum Stack finden Sie in der Dokumentation unten.

Kanalnamen konfigurieren

Standardmäßig wird Monolog mit einem „Kanalnamen“ instanziiert, der der aktuellen Umgebung entspricht, z. B. production oder local. Um diesen Wert zu ändern, fügen Sie Ihrer Kanalkonfiguration eine name-Option hinzu:

'stack' => [  
  'driver' => 'stack',    
  'name' => 'channel-name',    
  'channels' => ['single', 'slack'],
 ],

Verfügbare Kanaltreiber

名称描述
stack一个便于创建『多通道』通道的包装器
single单个文件或者基于日志通道的路径 (StreamHandler)
daily一个每天轮换的基于 Monolog 驱动的 RotatingFileHandler
slack一个基于 Monolog 驱动的 SlackWebhookHandler
syslog一个基于 Monolog 驱动的 SyslogHandler
errorlog一个基于 Monolog 驱动的 ErrorLogHandler
monolog一个可以使用任何支持 Monolog 处理程序的 Monolog 工厂驱动程序
custom一个调用指定工厂创建通道的驱动程序

{Tipp} Informationen zu monolog- und custom-Treibern finden Sie unter Erweiterte Kanalanpassung

Konfigurieren einzelner und täglicher Kanäle

single und daily Der Kanal enthält drei optionale Konfigurationselemente: bubble, permission und locking.

nameBeschreibungStandardwert
名称描述默认值
bubble消息处理后,指示消息是否推送到其他通道true
permission日志文件权限644
locking写入之前尝试锁定日志文件false
Geben Sie nach der Verarbeitung der Nachricht an, ob die Nachricht gepusht wird zu anderen Kanälen< /td>true
<🎜>Protokolldateiberechtigungen644
<🎜>Versuch, die Protokolldatei vor dem Schreiben zu sperrenfalse

Konfigurieren eines Slack-Kanals

slack Kanäle erfordern die Konfigurationsoption url. Diese URL sollte mit einem eingehenden Webhook übereinstimmen, den Sie für Ihr Slack-Team konfiguriert haben.

Erstellen eines Protokollstapels

Wie bereits erwähnt, ermöglicht Ihnen der stack-Treiber die Integration mehrerer Protokollkanäle in einem einzigen Protokollkanalkanal. Schauen wir uns ein Beispiel für eine Anwendungskonfiguration auf Produktionsebene an, um zu sehen, wie der Protokollstapel verwendet wird: :

'channels' => [ 
   'stack' => [     
      'driver' => 'stack',        
      'channels' => ['syslog', 'slack'],   
     ],    
      'syslog' => [      
       'driver' => 'syslog',        
       'level' => 'debug',    
      ],    
      'slack' => [       
          'driver' => 'slack',        
          'url' => env('LOG_SLACK_WEBHOOK_URL'),        
          'username' => 'Laravel Log',        
          'emoji' => ':boom:',        
          'level' => 'critical',    
         ],
   ],

Lassen Sie uns diese Konfiguration analysieren. Als erstes ist zu beachten, dass stack mithilfe seiner Option channels zwei weitere Kanäle aggregiert: syslog und slack . Daher haben beim Protokollieren einer Protokollnachricht beide Kanäle die Möglichkeit, die Aufzeichnung der Protokollnachricht abzuschließen:

Protokollebene

Bitte beachten Sie die syslog und < in der obiges Beispiel slack Konfigurationselemente, die in 🎜> vorhanden sind. Diese Option bestimmt die Mindestprotokollierungsstufe, die von diesem Kanal protokolliert werden muss. Monolog (ein leistungsstarker Laravel-Protokollierungsdienst) akzeptiert alle in der RFC 5424-Spezifikation definierten Stufen: levelNotfall, Alarm, kritisch, Fehler, Warnung, Hinweis, Info und Debug.

Angenommen, wir verwenden die

-Methode, um die Nachricht zu protokollieren: debug

Log::debug('An informational message.');

Gemäß unserer Konfiguration protokolliert der

-Kanal die Nachricht jedoch im Systemprotokoll Wenn die Nachricht nicht syslog oder höher ist, wird sie nicht an Slack gesendet. Wenn wir eine critical-Nachricht protokollieren, wird diese an Syslog und Slack gesendet, da der Level von emergency höher ist als die Mindestlevelgrenze für beide Kanäle: emergency

Log::emergency('The system is down!');

Protokollnachrichten schreiben

kann die

-Fassade verwenden Schreiben Sie Informationen in das Protokoll. Wie bereits erwähnt, stellt die Protokollierung die verfügbaren Protokollierungsstufen bereit, die in der RFC 5424-Spezifikation definiert sind: LogNotfall, Alarm, kritisch, Fehler, Warnung, Hinweis, info und debug:

Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);

Daher können Sie jede dieser Methoden aufrufen, um die entsprechende Ebene zu protokollieren. Standardmäßig werden Nachrichten in den Standardprotokollkanal geschrieben, der in der

-Konfigurationsdatei definiert ist: config/logging.php

<?php
   namespace App\Http\Controllers;use App\User;
   use Illuminate\Support\Facades\Log;
   use App\Http\Controllers\Controller;
   class UserController extends Controller{   
    /**
     * 显示给定用户的配置信息。
     *
     * @param  int  $id
     * @return Response
     */  
    public function showProfile($id)  
      {     
         Log::info('Showing user profile for user: '.$id);        
         return view('user.profile', ['user' => User::findOrFail($id)]);   
       }
    }

Kontextinformationen

An ein Array von Kontextdaten kann übergeben werden Protokollmethode. Die Informationen werden formatiert und mit der Protokollmeldung angezeigt:

Log::info('User failed to login.', ['id' => $user->id]);

In angegebenen Kanal schreiben

Manchmal möchten Sie möglicherweise Nachrichten an einen anderen Kanal als den Standardkanal der Anwendung schreiben. Sie können die Log-Methode der channel-Fassade verwenden, um jeden in der Konfigurationsdatei definierten Kanal abzurufen und die Nachricht hineinzuschreiben:

Log::channel('slack')->info('Something happened!');

Wenn Sie einen On-Demand-Aufzeichnungsstapel erstellen möchten, der aus mehreren Kanälen besteht , können Sie stack verwenden Methode:

Log::stack(['single', 'slack'])->info('Something happened!');

Hochgradig angepasster Monolog-Kanal

Anpassen für Kanäle Monolog

Manchmal müssen Sie den Monolog eines vorhandenen Kanals vollständig steuern: Beispielsweise möchten Sie möglicherweise einen benutzerdefinierten Monolog FormatterInterface für die Protokollverarbeitung für einen bestimmten Kanal konfigurieren:

Konfigurieren Sie zuerst den Kanal. Definieren Sie ein tap-Array in . Das Array tap enthält eine Liste von Klassen, die nach der Erstellung des Kanals in benutzerdefinierten Monolog-Instanzen verwendet werden können:

'single' => [   
 'driver' => 'single',    
 'tap' => [App\Logging\CustomizeFormatter::class],    
 'path' => storage_path('logs/laravel.log'),    
 'level' => 'debug',
],

Sobald die Option tap im Kanal konfiguriert ist, ist dies erforderlich Bereiten Sie es für die Verwendung in der benutzerdefinierten Monolog-Instanzklasse vor. Diese Klasse erfordert eine Methode: __invoke, die eine IlluminateLogLogger-Instanz als Parameter akzeptiert. Die IlluminateLogLogger-Instanz leitet alle Methodenaufrufe an die zugrunde liegende Monolog-Instanz weiter:

<?php
   namespace App\Logging;
   class CustomizeFormatter{   
    /**
     * 自定义给定的日志实例。
     *
     * @param  \Illuminate\Log\Logger  $logger
     * @return void
     */   
   public function __invoke($logger)   
    {      
      foreach ($logger->getHandlers() as $handler) {        
          $handler->setFormatter(...);      
         }  
      }
   }

{tip} Alle „Tap“-Klassen werden vom Service-Container aufgelöst, sodass alle von ihnen abhängigen Konstruktoren automatisch eingefügt werden .

Erstellen eines Monolog-Prozessorkanals

Monolog verfügt über eine Vielzahl verfügbarer Prozessoren. In manchen Fällen möchten Sie möglicherweise nur einen Monolog-gesteuerten Protokolltyp mit einem bestimmten Prozessor erstellen. Diese Kanäle können mit dem monolog-Treiber erstellt werden.

Bei Verwendung des monolog-Treibers wird das Konfigurationselement handler verwendet, um den zu instanziierenden Prozessor anzugeben. Wenn der Konstruktor des Prozessors Parameter erfordert, können Sie das optionale Konfigurationselement with verwenden, um Folgendes anzugeben:

'logentries' => [   
 'driver'  => 'monolog',    
 'handler' => Monolog\Handler\SyslogUdpHandler::class,    
 'with' => [      
   'host' => 'my.logentries.internal.datahubhost.company.com',        
   'port' => '10000',   
   ],
  ],

Monolog-Formatierung

Verwenden Sie den monolog-Treiber, Monologs LineFormatter wird als Standardformatierer verwendet. Natürlich können Sie auch die Konfigurationselemente formatter und formatter_with verwenden, um den Formatprozessortyp anzupassen:

'browser' => [  
  'driver' => 'monolog',    
  'handler' => Monolog\Handler\BrowserConsoleHandler::class,    
  'formatter' => Monolog\Formatter\HtmlFormatter::class,    
  'formatter_with' => [      
    'dateFormat' => 'Y-m-d',  
    ],
  ],

Wenn der verwendete Monolog-Prozessor einen eigenen Formatgenerierungsprozessor bereitstellen kann, können Sie formatter verwenden Das Konfigurationselement ist angegeben als default:

'newrelic' => [ 
   'driver' => 'monolog',    
   'handler' => Monolog\Handler\NewRelicHandler::class,    
   'formatter' => 'default',
],

Kanäle über die Fabrik erstellen

Wenn Sie einen vollständig benutzerdefinierten Kanal definieren möchten, haben Sie die volle Kontrolle über die Instanziierung und Konfiguration von Monolog. Sie können den config/logging.php-Treiber im custom-Konfigurationsdateityp angeben. Ihre Konfiguration sollte eine via-Option enthalten, die auf die Factory-Klasse verweist, die zum Erstellen von Monolog-Instanzen aufgerufen wird:

'channels' => [  
  'custom' => [      
    'driver' => 'custom',        
    'via' => App\Logging\CreateCustomLogger::class,   
    ],
 ],

Sobald der custom-Kanal konfiguriert ist, können Sie die Klasse definieren, die Monolog-Instanzen erstellt. Diese Klasse benötigt nur eine Methode: __invoke, die eine Monolog-Instanz zurückgeben kann:

<?php
  namespace App\Logging;use Monolog\Logger;
  class CreateCustomLogger{    
      /**
     * 创建一个 Monolog 实例.
     *
     * @param  array  $config
     * @return \Monolog\Logger
     */   
    public function __invoke(array $config) 
      {     
         return new Logger(...);  
       }
     }
Dieser Artikel wurde zuerst auf der Website LearnKu.com veröffentlicht.