Inhaltsverzeichnis
1. Was ist Protokollierung? In der Informatik bezieht sich Protokollierung auf die Aufzeichnung von Ereignissen und Informationen, die in einem Computersystem auftreten. Typischerweise werden diese Datensätze in Dateien oder Datenbanken gespeichert. Die Protokollierung hilft, den Betriebsstatus des Systems zu verstehen, Probleme rechtzeitig zu erkennen und zu lösen und dadurch die Zuverlässigkeit und Stabilität des Systems zu verbessern.
Im Anwendungsentwicklungsprozess ist die Protokollierung ein wesentliches Modul. Darüber hinaus ist die Protokollierung häufig ein zeitaufwändiger Vorgang, der sich bei synchroner Ausführung auf die Systemleistung auswirken kann. Zu diesem Zweck führt ThinkPHP6 die Funktion der asynchronen Protokollierung ein, sodass die Protokollierung die Reaktionsgeschwindigkeit der Anwendung nicht mehr beeinträchtigt.
rrreee
Heim PHP-Framework Denken Sie an PHP Wie verwende ich ThinkPHP6 für asynchrone Protokollierungsvorgänge?

Wie verwende ich ThinkPHP6 für asynchrone Protokollierungsvorgänge?

Jun 12, 2023 am 09:57 AM
thinkphp 异步 日志记录

Mit der rasanten Entwicklung des Internets sind Protokollierungsdienste zu einem unverzichtbaren Modul für jede große Webanwendung geworden. Um verschiedene Anforderungen wie Fehlersuche und Leistungsüberwachung zu erfüllen, wird in diesem Artikel erläutert, wie Sie mit dem ThinkPHP6-Framework asynchrone Protokollierungsvorgänge durchführen.

1. Was ist Protokollierung? In der Informatik bezieht sich Protokollierung auf die Aufzeichnung von Ereignissen und Informationen, die in einem Computersystem auftreten. Typischerweise werden diese Datensätze in Dateien oder Datenbanken gespeichert. Die Protokollierung hilft, den Betriebsstatus des Systems zu verstehen, Probleme rechtzeitig zu erkennen und zu lösen und dadurch die Zuverlässigkeit und Stabilität des Systems zu verbessern.

In Webanwendungen kann die Protokollierung Entwicklern helfen, die Probleme und Fehler, auf die das System stößt, besser zu verstehen. Anhand der Protokollierung können Entwickler das Verhalten der Anwendung klar nachvollziehen und erkennen, wo und wann Fehler auftreten.

2. ThinkPHP6 asynchrone Protokollierung

Im Anwendungsentwicklungsprozess ist die Protokollierung ein wesentliches Modul. Darüber hinaus ist die Protokollierung häufig ein zeitaufwändiger Vorgang, der sich bei synchroner Ausführung auf die Systemleistung auswirken kann. Zu diesem Zweck führt ThinkPHP6 die Funktion der asynchronen Protokollierung ein, sodass die Protokollierung die Reaktionsgeschwindigkeit der Anwendung nicht mehr beeinträchtigt.

Normalerweise protokollieren wir den Controller oder das Modell. Um dies zu erreichen, verwenden wir die injizierte PsrLogLoggerInterface-Schnittstelle.

// Controller或Model中
use PsrLogLoggerInterface;

public function index(LoggerInterface $logger){
    $logger->info('hello world');
}
Nach dem Login kopieren

Einfach zu bedienen. Verwenden Sie die asynchrone Protokollierung, um einen asynchronen Logger zu definieren: PsrLogLoggerInterface 接口来实现。

use MonologLogger;
use MonologHandlerStreamHandler;

$logger=new Logger("AsyncLogger");
$logger->pushHandler(new StreamHandler('runtime/log/async.log'), Logger::INFO);
Nach dem Login kopieren

简单的使用方式。使用异步日志记录,定义一个异步日志记录器:

// Message类
namespace appcommon;

class Message
{
    /**
     * 记录日志
     * @param $level
     * @param $message
     * @param array $context
     * @return bool
     */
    public static function log($level,$message,array $context=[]){
        $data=[
            'level'=>$level,
            'message'=>$message,
            'context'=>$context,
            'channel'=>'AsyncLogger',
            'datetime'=>date('Y-m-d H:i:s'),
            'host'=>$_SERVER['SERVER_ADDR'] ?? '',
            'uri'=>$_SERVER['REQUEST_URI'] ?? '',
        ];

        $producer=Queue::getConnection('AsyncLogger',true);
        $producer->setExchangeOptions(['name'=>'async_logs','type'=>'topic','durable'=>true])->declareExchange();

        try{
            $producer->publish(json_encode($data),[
                'routing_key' =>'log',
                'exchange' =>'async_logs',
            ]);
            return true;
        }catch (Exception $e){
            return false;
        }
    }
}
Nach dem Login kopieren

日志记录器定义好后,使用队列发送日志记录信息,这里我们选择使用 RabbitMQ 当做队列服务。

// Consumer类
use BunnyMessage;
use PsrLogLoggerInterface;

class Consumer
{
    /**
     * @param Message $message
     * @param LoggerInterface $logger
     */
    public function process(Message $message,LoggerInterface $logger){
        $body=$message->content;
        $data= json_decode($body,true);
        $channel=$data['channel'] ?? 'default_logger';

        $logger->notice($data['message'], $data);
    }
}
Nach dem Login kopieren

其中,我们使用 appcommonQueue 类来提供 rabbitmq 的连接实例;data中除了记录日志的信息外,还包含一些环境信息,比如时间、IP地址、请求的uri地址等。

队列处理程序:

// Queue类
namespace appcommon;

use BunnyAsyncClient;
use BunnyChannel;
use BunnyMessage;
use BunnyProtocolMethodBasicConsumeOkFrame;
use BunnyProtocolMethodChannelCloseFrame;
use BunnyProtocolMethodChannelCloseOkFrame;
use BunnyProtocolMethodConnectionCloseFrame;
use BunnyProtocolMethodConnectionCloseOkFrame;
use BunnyProtocolMethodConnectionStartFrame;
use BunnyClientStateEnum;
use BunnyMessage as BunnyMessage;

class Queue
{
    /**
     * @param string $queueName
     * @return Client|null
     */
    public static function getConnection(string $routingKey, bool $persistent=false):?Client
    {
        $config=config('rabbitmq.async_log');
        $client=new Client([
            'host' => $config['host'],
            'port' => $config['port'],
            'user' => $config['user'],
            'password' => $config['password'],
            'vhost' => $config['vhost'],//注意此处改为需要的 VHOST
            'concurrency' => 2,
        ]);

        try{
            $client->connect();
            $client->channel()
                ->then(function (Channel $channel) use($client,$routingKey,$persistent){
                    $channel->exchangeDeclare('async_logs','topic',true,true);
                    $channel->queueDeclare($routingKey, $passive=false,$durable=true,$exclusive=false,$autoDelete=false,$nowait=false);
                    $channel->queueBind($routingKey, 'async_logs', $routingKey);

                    $channel->consume(
                        function ($msg, Channel $channel, BunnyMessage $message) use($client,$routingKey){
                            $className=config('rabbitmq.async_log.consumer');
                            $consumer=new $className($client,$routingKey);
                            $consumer->process($message,app('log.async_logger'));
                            $channel->ack($msg);//处理消息
                        },
                        $routingKey,//队列Name
                        '',//消费Tag
                        false,//no_local
                        false,//no_ack
                        false,//exclusive
                        $persistent ? ['delivery_mode'=>2] : []
                    );
                });
        }catch (Exception $e){
            return null;
        }finally{
            return $client;
        }
    }
}
Nach dem Login kopieren

当然,我们还需要一个辅助处理日志的类。

rrreee

上面这段代码中定义了队列连接的 host、port 等,通过 $client->channel() 创建了一个 channel 对象,通过 $channel->exchangeDeclare()$channel->queueDeclare() 创建了 exchange 和 queue,并将它们进行了绑定。最后,使用 $channel->consume()rrreee

Nachdem der Logger definiert wurde, verwenden Sie eine Warteschlange zum Senden von Protokollierungsinformationen. Hier verwenden wir RabbitMQ als Warteschlangendienst.

rrreee

Unter anderem verwenden wir die Klasse appcommonQueue, um Rabbitmq-Verbindungsinstanzen bereitzustellen. Zusätzlich zur Aufzeichnung von Protokollinformationen enthält data auch einige Umgebungsinformationen wie Zeit und IP Adresse, angeforderte URI-Adresse usw.

Warteschlangenhandler:
    rrreee
  1. Natürlich brauchen wir auch eine Klasse, die uns bei der Protokollverarbeitung unterstützt.
  2. rrreee
  3. Der obige Code definiert den Host, den Port usw. der Warteschlangenverbindung. Ein Kanalobjekt wird über $client->channel() erstellt, und ein Kanalobjekt wird über $channel->exchangeDeclare () und $channel->queueDeclare() erstellen Exchange und Warteschlange und binden sie. Verwenden Sie abschließend $channel->consume(), um Nachrichten aus der Warteschlange asynchron zu konsumieren und an die Nachrichtenverarbeitungsklasse zu senden.
  4. 3. Zusammenfassung
In diesem Artikel wird erläutert, wie Sie mit dem ThinkPHP6-Framework asynchrone Protokollierungsvorgänge durchführen, sodass die Protokollierung die Reaktionsgeschwindigkeit der Anwendung nicht mehr beeinträchtigt. Im Allgemeinen sind die folgenden Schritte:

🎜Entwickeln Sie Ihren eigenen asynchronen Logger. 🎜🎜Verwenden Sie RabbitMQ für die Nachrichtenwarteschlangenverarbeitung. 🎜🎜Schreiben Sie einen Nachrichtenhandler. 🎜🎜🎜In tatsächlichen Projekten müssen wir den Code entsprechend den spezifischen Anforderungen optimieren und anpassen die Konfiguration der Warteschlange. Durch asynchrone Protokollierung kann die Betriebseffizienz von Webanwendungen effektiv verbessert und die Stabilität und Zuverlässigkeit des Systems verbessert werden. 🎜

Das obige ist der detaillierte Inhalt vonWie verwende ich ThinkPHP6 für asynchrone Protokollierungsvorgänge?. 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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So führen Sie das Thinkphp-Projekt aus So führen Sie das Thinkphp-Projekt aus Apr 09, 2024 pm 05:33 PM

Um das ThinkPHP-Projekt auszuführen, müssen Sie: Composer installieren, das Projektverzeichnis aufrufen und http://localhost:8000 aufrufen.

Es gibt mehrere Versionen von thinkphp Es gibt mehrere Versionen von thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP verfügt über mehrere Versionen, die für verschiedene PHP-Versionen entwickelt wurden. Zu den Hauptversionen gehören 3.2, 5.0, 5.1 und 6.0, während Nebenversionen dazu dienen, Fehler zu beheben und neue Funktionen bereitzustellen. Die neueste stabile Version ist ThinkPHP 6.0.16. Berücksichtigen Sie bei der Auswahl einer Version die PHP-Version, die Funktionsanforderungen und den Community-Support. Für optimale Leistung und Support wird empfohlen, die neueste stabile Version zu verwenden.

So führen Sie thinkphp aus So führen Sie thinkphp aus Apr 09, 2024 pm 05:39 PM

Schritte zum lokalen Ausführen von ThinkPHP Framework: Laden Sie ThinkPHP Framework herunter und entpacken Sie es in ein lokales Verzeichnis. Erstellen Sie einen virtuellen Host (optional), der auf das ThinkPHP-Stammverzeichnis verweist. Konfigurieren Sie Datenbankverbindungsparameter. Starten Sie den Webserver. Initialisieren Sie die ThinkPHP-Anwendung. Greifen Sie auf die URL der ThinkPHP-Anwendung zu und führen Sie sie aus.

Was ist besser, Laravel oder Thinkphp? Was ist besser, Laravel oder Thinkphp? Apr 09, 2024 pm 03:18 PM

Leistungsvergleich von Laravel- und ThinkPHP-Frameworks: ThinkPHP schneidet im Allgemeinen besser ab als Laravel und konzentriert sich auf Optimierung und Caching. Laravel schneidet gut ab, aber für komplexe Anwendungen ist ThinkPHP möglicherweise besser geeignet.

So installieren Sie thinkphp So installieren Sie thinkphp Apr 09, 2024 pm 05:42 PM

ThinkPHP-Installationsschritte: Bereiten Sie PHP-, Composer- und MySQL-Umgebungen vor. Erstellen Sie Projekte mit Composer. Installieren Sie das ThinkPHP-Framework und die Abhängigkeiten. Datenbankverbindung konfigurieren. Anwendungscode generieren. Starten Sie die Anwendung und besuchen Sie http://localhost:8000.

Wie ist die Leistung von thinkphp? Wie ist die Leistung von thinkphp? Apr 09, 2024 pm 05:24 PM

ThinkPHP ist ein leistungsstarkes PHP-Framework mit Vorteilen wie Caching-Mechanismus, Codeoptimierung, Parallelverarbeitung und Datenbankoptimierung. Offizielle Leistungstests zeigen, dass es mehr als 10.000 Anfragen pro Sekunde verarbeiten kann und in großen Websites und Unternehmenssystemen wie JD.com und Ctrip in praktischen Anwendungen weit verbreitet ist.

So erstellen Sie eine benutzerdefinierte Protokollierungslösung für Ihre PHP-Website So erstellen Sie eine benutzerdefinierte Protokollierungslösung für Ihre PHP-Website May 03, 2024 am 08:48 AM

Es gibt mehrere Möglichkeiten, eine benutzerdefinierte Protokollierungslösung für Ihre PHP-Website zu erstellen, einschließlich: Verwendung einer PSR-3-kompatiblen Bibliothek (wie Monolog, Log4php, PSR-3Logger) oder Verwendung nativer PHP-Protokollierungsfunktionen (wie error_log(), syslog( ), debug_print_backtrace()). Mit einer benutzerdefinierten Protokollierungslösung können Sie das Verhalten Ihrer Anwendung überwachen und Probleme beheben. Beispiel: Verwenden Sie Monolog, um einen Logger zu erstellen, der Nachrichten in einer Festplattendatei protokolliert.

Wie führe ich eine Fehlerbehandlung und Protokollierung im C++-Klassendesign durch? Wie führe ich eine Fehlerbehandlung und Protokollierung im C++-Klassendesign durch? Jun 02, 2024 am 09:45 AM

Die Fehlerbehandlung und -protokollierung im C++-Klassendesign umfasst: Ausnahmebehandlung: Ausnahmen abfangen und behandeln, wobei benutzerdefinierte Ausnahmeklassen verwendet werden, um spezifische Fehlerinformationen bereitzustellen. Fehlercode: Verwenden Sie eine Ganzzahl oder Aufzählung, um die Fehlerbedingung darzustellen und im Rückgabewert zurückzugeben. Behauptung: Überprüfen Sie Vor- und Nachbedingungen und lösen Sie eine Ausnahme aus, wenn sie nicht erfüllt sind. Protokollierung der C++-Bibliothek: Grundlegende Protokollierung mit std::cerr und std::clog. Externe Protokollierungsbibliotheken: Integrieren Sie Bibliotheken von Drittanbietern für erweiterte Funktionen wie Ebenenfilterung und Protokolldateirotation. Benutzerdefinierte Protokollklasse: Erstellen Sie Ihre eigene Protokollklasse, abstrahieren Sie den zugrunde liegenden Mechanismus und stellen Sie eine gemeinsame Schnittstelle zum Aufzeichnen verschiedener Informationsebenen bereit.

See all articles