Heim > Backend-Entwicklung > PHP-Tutorial > PSR-Logger-Schnittstelle in PHP

PSR-Logger-Schnittstelle in PHP

Patricia Arquette
Freigeben: 2025-01-11 16:06:43
Original
922 Leute haben es durchsucht

PSR-Logger Interface in PHP

Ahnii!

Kürzlich habe ich ein Team bei der Migration von Monolog zu einer benutzerdefinierten Protokollierungslösung unterstützt. Ihre Protokollierung war nicht standardisiert und erforderte Codeänderungen in zahlreichen Dateien. Dies unterstreicht den Wert von PSR-3, einer Lösung, die ich hier demonstrieren werde.

PSR-3 verstehen (5 Minuten)

PSR-3 fungiert als Protokollierungsvertrag in PHP. Ähnlich wie ein standardisiertes Fahrzeugdesign eine einfache Bedienung über verschiedene Modelle hinweg gewährleistet, bietet PSR-3 ein konsistentes Protokollierungsbibliotheksverhalten.

1. Die Logger-Schnittstelle

Dieser Vertrag definiert die Schnittstelle:

<?php namespace Psr\Log;

interface LoggerInterface
{
    public function emergency($message, array $context = array());
    public function alert($message, array $context = array());
    public function critical($message, array $context = array());
    public function error($message, array $context = array());
    public function warning($message, array $context = array());
    public function notice($message, array $context = array());
    public function info($message, array $context = array());
    public function debug($message, array $context = array());
    public function log($level, $message, array $context = array());
}

?>
Nach dem Login kopieren

2. Protokollierungsebenen (3 Minuten)

Diese Stufen stellen eine Schweregradskala dar:

  1. Notfall: ? Katastrophaler Ausfall (System unbrauchbar).
  2. Alarm: ? Erfordert sofortiges Handeln.
  3. Kritisch: ⚠️ Schwerwiegender Komponentenfehler.
  4. Fehler: ❌ Fehler, aber System betriebsbereit.
  5. Warnung: ⚡ Mögliches Problem.
  6. Hinweis: ? Normales, aber bedeutendes Ereignis.
  7. Info: ℹ️ Informationsnachricht.
  8. Debug: ? Debugging-Informationen.

Reale Umsetzung (10 Minuten)

Lassen Sie uns einen Logger erstellen, der in Dateien schreibt und kritische Fehler an Slack sendet:

<?php namespace App\Logging;

use Psr\Log\AbstractLogger;
use Psr\Log\LogLevel;

class SmartLogger extends AbstractLogger
{
    private $logFile;
    private $slackWebhook;

    public function __construct(string $logFile, string $slackWebhook)
    {
        $this->logFile = $logFile;
        $this->slackWebhook = $slackWebhook;
    }

    public function log($level, $message, array $context = array())
    {
        $timestamp = date('Y-m-d H:i:s');
        $message = $this->interpolate($message, $context);
        $logLine = "[$timestamp] [$level] $message" . PHP_EOL;

        file_put_contents($this->logFile, $logLine, FILE_APPEND);

        if (in_array($level, [LogLevel::CRITICAL, LogLevel::EMERGENCY])) {
            $this->notifySlack($level, $message);
        }
    }

    private function notifySlack($level, $message)
    {
        $emoji = $level === LogLevel::EMERGENCY ? '?' : '⚠️';
        $payload = json_encode([
            'text' => "$emoji *$level*: $message"
        ]);

        $ch = curl_init($this->slackWebhook);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_exec($ch);
        curl_close($ch);
    }

    private function interpolate($message, array $context = array())
    {
        $replace = array();
        foreach ($context as $key => $val) {
            $replace['{' . $key . '}'] = $val;
        }
        return strtr($message, $replace);
    }
}
Nach dem Login kopieren

Verwendung in Ihrem Projekt (5 Minuten)

Beispielverwendung:

$logger = new SmartLogger(
    '/var/log/app.log',
    'https://hooks.slack.com/services/YOUR/WEBHOOK/HERE'
);

$logger->info('User {user} logged in from {ip}', [
    'user' => 'jonesrussell',
    'ip' => '192.168.1.1'
]);

$logger->critical('Payment gateway {gateway} is down!', [
    'gateway' => 'Stripe',
    'error_code' => 500
]);
Nach dem Login kopieren

Framework-Integration (5 Minuten)

Laravel und Symfony bieten integrierte PSR-3-Unterstützung.

Laravel:

public function processOrder($orderId)
{
    try {
        Log::info('Order processed', ['order_id' => $orderId]);
    } catch (\Exception $e) {
        Log::error('Order failed', [
            'order_id' => $orderId,
            'error' => $e->getMessage()
        ]);
        throw $e;
    }
}
Nach dem Login kopieren

Symfony:

class OrderController extends AbstractController
{
    public function process(LoggerInterface $logger, string $orderId)
    {
        $logger->info('Starting order process', ['order_id' => $orderId]);
        // Your code here
    }
}
Nach dem Login kopieren

Schnelle Tipps (2 Minuten)

  1. ? Seien Sie genau: Fügen Sie detaillierten Kontext in Protokolle ein.
  2. ? Verwenden Sie die richtige Stufe: Vermeiden Sie die übermäßige Verwendung von Stufen mit hohem Schweregrad.

Nächste Schritte und Ressourcen

Dieser Beitrag ist Teil einer Serie über PSR-Standards in PHP. Zukünftige Themen umfassen PSR-4.

Ressourcen:

  • Offizielle PSR-3-Spezifikation
  • Monolog-Dokumentation
  • Serien-Beispiel-Repository (v0.2.0 – PSR-3-Implementierung)

Das obige ist der detaillierte Inhalt vonPSR-Logger-Schnittstelle in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage