Rumah > pembangunan bahagian belakang > tutorial php > Antara Muka PSR-Logger dalam PHP

Antara Muka PSR-Logger dalam PHP

Patricia Arquette
Lepaskan: 2025-01-11 16:06:43
asal
940 orang telah melayarinya

PSR-Logger Interface in PHP

Ahnii!

Baru-baru ini, saya telah membantu pasukan berhijrah daripada Monolog kepada penyelesaian pengelogan tersuai. Pengelogan mereka tidak diseragamkan, memerlukan perubahan kod merentas banyak fail. Ini menyerlahkan nilai PSR-3, penyelesaian yang saya akan tunjukkan di sini.

Memahami PSR-3 (5 minit)

PSR-3 bertindak sebagai kontrak pembalakan dalam PHP. Sama seperti cara reka bentuk kereta standard memastikan kemudahan operasi merentas model yang berbeza, PSR-3 menyediakan gelagat perpustakaan pembalakan yang konsisten.

1. Antara Muka Logger

Kontrak ini mentakrifkan antara muka:

<?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());
}

?>
Salin selepas log masuk

2. Tahap Log (3 minit)

Tahap ini mewakili skala keterukan:

  1. Kecemasan: ? Kegagalan bencana (sistem tidak boleh digunakan).
  2. Makluman: ? Memerlukan tindakan segera.
  3. Kritis: ⚠️ Kegagalan komponen utama.
  4. Ralat: ❌ Kegagalan, tetapi sistem beroperasi.
  5. Amaran: ⚡ Kemungkinan masalah.
  6. Notis: ? Peristiwa biasa tetapi penting.
  7. Maklumat: ℹ️ Mesej maklumat.
  8. Nyahpepijat: ? Menyahpepijat maklumat.

Pelaksanaan Dunia Sebenar (10 minit)

Mari kita buat penulisan logger pada fail dan hantar ralat kritikal ke Slack:

<?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);
    }
}
Salin selepas log masuk

Menggunakannya Dalam Projek Anda (5 minit)

Contoh penggunaan:

$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
]);
Salin selepas log masuk

Integrasi Rangka Kerja (5 minit)

Laravel dan Symfony menyediakan sokongan PSR-3 terbina dalam.

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;
    }
}
Salin selepas log masuk

Symfony:

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

Petua Pantas (2 minit)

  1. ? Bersikap Spesifik: Sertakan konteks terperinci dalam log.
  2. ? Gunakan Tahap yang Betul: Elakkan penggunaan berlebihan tahap keterukan tinggi.

Langkah & Sumber Seterusnya

Siaran ini adalah sebahagian daripada siri tentang piawaian PSR dalam PHP. Topik masa hadapan termasuk PSR-4.

Sumber:

  • Spesifikasi Rasmi PSR-3
  • Dokumentasi Monolog
  • Repositori Contoh Siri (v0.2.0 - Pelaksanaan PSR-3)

Atas ialah kandungan terperinci Antara Muka PSR-Logger dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan