国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table des matières
1. Qu'est-ce que la journalisation
2. Journalisation asynchrone ThinkPHP6
rrreee
Maison cadre php PensezPHP Comment utiliser ThinkPHP6 pour les opérations de journalisation asynchrone ?

Comment utiliser ThinkPHP6 pour les opérations de journalisation asynchrone ?

Jun 12, 2023 am 09:57 AM
thinkphp asynchrone Enregistrement

Avec le développement rapide d'Internet, les services de journalisation sont devenus un module essentiel pour toute application Web à grande échelle. Afin de faciliter divers besoins tels que le dépannage des erreurs et la surveillance des performances, cet article explique comment utiliser le framework ThinkPHP6 pour effectuer des opérations de journalisation asynchrone.

1. Qu'est-ce que la journalisation

Dans le domaine de l'informatique, la journalisation fait référence à l'enregistrement d'événements et d'informations qui se produisent dans un système informatique. Généralement, ces enregistrements sont stockés dans des fichiers ou des bases de données. La journalisation permet de comprendre l'état de fonctionnement du système, de découvrir et de résoudre les problèmes en temps opportun et d'améliorer ainsi la fiabilité et la stabilité du système.

Dans les applications Web, la journalisation peut aider les développeurs à mieux comprendre les problèmes et les erreurs rencontrés par le système. Grace à la journalisation, les développeurs peuvent clairement comprendre le comportement de l'application ainsi que l'endroit et le moment où les erreurs se produisent.

2. Journalisation asynchrone ThinkPHP6

Dans le processus de développement d'applications, la journalisation est un module essentiel. De plus, la journalisation est souvent une opération fastidieuse qui peut affecter les performances du système si elle est effectuée de manière synchrone. à cette fin, ThinkPHP6 introduit la fonction de journalisation asynchrone, afin que la journalisation n'affecte plus la vitesse de réponse de l'application.

En nous connectant généralement au contr?leur ou au modèle, nous utilisons l'interface PsrLogLoggerInterface injectée pour y parvenir. PsrLogLoggerInterface 接口來實(shí)現(xiàn)。

// Controller或Model中
use PsrLogLoggerInterface;

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

簡單的使用方式。使用異步日志記錄,定義一個異步日志記錄器:

use MonologLogger;
use MonologHandlerStreamHandler;

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

日志記錄器定義好后,使用隊(duì)列發(fā)送日志記錄信息,這里我們選擇使用 RabbitMQ 當(dāng)做隊(duì)列服務(wù)。

// 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;
        }
    }
}

其中,我們使用 appcommonQueue 類來提供 rabbitmq 的連接實(shí)例;data中除了記錄日志的信息外,還包含一些環(huán)境信息,比如時間、IP地址、請求的uri地址等。

隊(duì)列處理程序:

// 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);
    }
}

當(dāng)然,我們還需要一個輔助處理日志的類。

// 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,//隊(duì)列Name
                        '',//消費(fèi)Tag
                        false,//no_local
                        false,//no_ack
                        false,//exclusive
                        $persistent ? ['delivery_mode'=>2] : []
                    );
                });
        }catch (Exception $e){
            return null;
        }finally{
            return $client;
        }
    }
}

上面這段代碼中定義了隊(duì)列連接的 host、port 等,通過 $client->channel() 創(chuàng)建了一個 channel 對象,通過 $channel->exchangeDeclare()$channel->queueDeclare() 創(chuàng)建了 exchange 和 queue,并將它們進(jìn)行了綁定。最后,使用 $channel->consume()rrreee

Facile à utiliser. Utilisez la journalisation asynchrone pour définir un enregistreur asynchrone?:

rrreee

Une fois l'enregistreur défini, utilisez une file d'attente pour envoyer les informations de journalisation. Ici, nous choisissons d'utiliser RabbitMQ comme service de file d'attente.

rrreee

Parmi eux, nous utilisons la classe appcommonQueue pour fournir des instances de connexion Rabbitmq?; en plus de l'enregistrement des informations de journal, data contient également des informations environnementales, telles que l'heure et l'adresse IP?; adresse, adresse uri demandée, etc.
  1. Gestionnaire de file d'attente?:
  2. rrreee
  3. Bien s?r, nous avons également besoin d'une classe pour nous aider dans le traitement des journaux.
  4. rrreee
  5. Le code ci-dessus définit l'h?te, le port, etc. de la connexion à la file d'attente. Un objet canal est créé via $client->channel(), et un objet canal est créé via $channel->exchangeDeclare () et $channel->queueDeclare() créent un échange et une file d'attente et les lient. Enfin, utilisez $channel->consume() pour consommer de manière asynchrone les messages de la file d'attente et envoyer les messages à la classe de traitement des messages.
3. Résumé

Cet article explique comment utiliser le framework ThinkPHP6 pour effectuer des opérations de journalisation asynchrone afin que la journalisation n'affecte plus la vitesse de réponse de l'application. En général, voici les étapes?: ??????Développez votre propre enregistreur asynchrone ????Utilisez RabbitMQ pour le traitement de la file d'attente des messages ????écrivez un gestionnaire de messages ??????Dans les projets réels, nous devons optimiser le code en fonction des besoins spécifiques et l'ajuster la configuration de la file d'attente. Grace à la journalisation asynchrone, l'efficacité opérationnelle des applications Web peut être efficacement améliorée, ainsi que la stabilité et la fiabilité du système. ??

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276
Comment exécuter le projet thinkphp Comment exécuter le projet thinkphp Apr 09, 2024 pm 05:33 PM

Pour exécuter le projet ThinkPHP, vous devez?: installer Composer?; utiliser Composer pour créer le projet?; entrer dans le répertoire du projet et exécuter php bin/console serve?; visiter http://localhost:8000 pour afficher la page d'accueil.

Il existe plusieurs versions de thinkphp Il existe plusieurs versions de thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP dispose de plusieurs versions con?ues pour différentes versions de PHP. Les versions majeures incluent 3.2, 5.0, 5.1 et 6.0, tandis que les versions mineures sont utilisées pour corriger les bogues et fournir de nouvelles fonctionnalités. La dernière version stable est ThinkPHP 6.0.16. Lorsque vous choisissez une version, tenez compte de la version PHP, des exigences en matière de fonctionnalités et du support de la communauté. Il est recommandé d'utiliser la dernière version stable pour de meilleures performances et une meilleure assistance.

Comment exécuter thinkphp Comment exécuter thinkphp Apr 09, 2024 pm 05:39 PM

étapes pour exécuter ThinkPHP Framework localement?: Téléchargez et décompressez ThinkPHP Framework dans un répertoire local. Créez un h?te virtuel (facultatif) pointant vers le répertoire racine ThinkPHP. Configurez les paramètres de connexion à la base de données. Démarrez le serveur Web. Initialisez l'application ThinkPHP. Accédez à l'URL de l'application ThinkPHP et exécutez-la.

Lequel est le meilleur, Laravel ou thinkphp ? Lequel est le meilleur, Laravel ou thinkphp ? Apr 09, 2024 pm 03:18 PM

Comparaison des performances des frameworks Laravel et ThinkPHP?: ThinkPHP fonctionne généralement mieux que Laravel, en se concentrant sur l'optimisation et la mise en cache. Laravel fonctionne bien, mais pour les applications complexes, ThinkPHP peut être mieux adapté.

Comment installer thinkphp Comment installer thinkphp Apr 09, 2024 pm 05:42 PM

étapes d'installation de ThinkPHP?: Préparez les environnements PHP, Composer et MySQL. Créez des projets à l'aide de Composer. Installez le framework ThinkPHP et ses dépendances. Configurez la connexion à la base de données. Générez le code de l'application. Lancez l'application et visitez http://localhost:8000.

Quelles sont les performances de thinkphp?? Quelles sont les performances de thinkphp?? Apr 09, 2024 pm 05:24 PM

ThinkPHP est un framework PHP hautes performances présentant des avantages tels que le mécanisme de mise en cache, l'optimisation du code, le traitement parallèle et l'optimisation des bases de données. Les tests de performances officiels montrent qu'il peut gérer plus de 10 000 requêtes par seconde et qu'il est largement utilisé dans les sites Web à grande échelle et les systèmes d'entreprise tels que JD.com et Ctrip dans les applications réelles.

Comment choisir un cadre de journalisation approprié pour le mécanisme de journalisation dans les fonctions Java?? Comment choisir un cadre de journalisation approprié pour le mécanisme de journalisation dans les fonctions Java?? May 04, 2024 am 11:33 AM

Dans les fonctions Java, des facteurs doivent être pris en compte lors du choix du framework de journalisation le plus approprié : Performances : pour les fonctions qui gèrent un grand nombre d'événements de journalisation Flexibilité : fournit des options de configuration flexibles évolutivité : s'étend facilement à mesure que la fonction se développe Support communautaire : support technique et derniers développements information

Comment déployer le projet thinkphp Comment déployer le projet thinkphp Apr 09, 2024 pm 05:36 PM

Pour déployer un projet ThinkPHP, vous devez?: 1. Créer un répertoire de déploiement?; 2. Télécharger les fichiers du projet?; 3. Configurer la base de données 4. Définir le mode d'application en mode production?; 6. Créer un projet virtuel?; h?te?; 7. Accédez au projet. Les considérations incluent la définition des autorisations appropriées, la suppression du cache du navigateur et des sauvegardes régulières.

See all articles