【PHPライブラリ】モノログ
Monolog は PHP 用のロギング ライブラリです。他のロギング ライブラリと比較すると、次のような特徴があります:
- 強力な機能。ログは、ファイル、ソケット、メールボックス、データベース、およびさまざまな Web サービスに送信できます。
- PSR3のインターフェース仕様に従います。これは、同じ仕様に従う他のログ ライブラリに簡単に置き換えることができます。
- 優れた拡張性。 Handler、Formatter、Processor のインターフェイスを通じて、Monolog クラス ライブラリをさまざまな方法で拡張およびカスタマイズできます。
基本的な使い方
最新バージョンをインストールします:
composer require monolog/monolog
PHP バージョン 5.3 以降が必要です。
php<?phpuse Monolog\Logger;use Monolog\Handler\StreamHandler;// 创建日志频道$log = new Logger('name');$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));// 添加日志记录$log->addWarning('Foo');$log->addError('Bar');
コアコンセプト
各 Logger インスタンスには、チャネル名 (チャネル) とハンドラー スタックが含まれています。レコードを追加すると、そのレコードはハンドラー スタックを通じて処理されます。各ハンドラーは、次のスタック内の次のハンドラーにレコードを渡すかどうかを決定することもできます。
ハンドラーを通じて、いくつかの複雑なログ操作を実装できます。たとえば、StreamHandler をスタックの一番下に置くと、最終的にすべてのログ レコードがハードディスク ファイルに書き込まれます。同時に、MailHandler をスタックの最上位に配置し、ログ レベルを設定してエラー ログを電子メールで送信します。 Handler には $bubble 属性があります。この属性は、ハンドラーがレコードをインターセプトし、次のハンドラーに流れるのを防ぐかどうかを定義します。したがって、MailHandler の $bubble パラメータを false に設定すると、エラー ログが発生したときに、ログは StreamHandler を通じてハードディスクに書き込まれるのではなく、MailHandler を通じて送信されます。
複数のロガーを作成でき、それぞれが独自のチャネル名とハンドラー スタックを定義できます。ハンドラーは複数のロガー間で共有できます。チャネル名がログに反映されるため、ログ記録の表示とフィルタリングが容易になります。
ログ形式 (Formatter) が指定されていない場合、Handler はデフォルトの Formatter を使用します。
ログ レベルはカスタマイズできません。現在、RFC 5424 で定義されている 8 つのレベル (デバッグ、情報、通知、警告、エラー、クリティカル、アラート、緊急) が使用されます。ログ レコードに他のニーズがある場合は、Processo を通じてログ レコードにコンテンツを追加できます。
ログレベル
- DEBUG (100): 詳細なデバッグ情報。
- 情報 (200): 主要なイベント。
- 通知 (250): 普通だが重要なイベント。
- 警告 (300): エラーではない例外が発生しました。
- ERROR (400): 実行時エラーですが、すぐに処理する必要はありません。
- CRITICA (500): 重大なエラーです。
- 緊急 (600): システムが使用できません。
詳しい使用方法の説明
複数のハンドラー
php<?phpuse Monolog\Logger;use Monolog\Handler\StreamHandler;use Monolog\Handler\FirePHPHandler;// 创建Logger实例$logger = new Logger('my_logger');// 添加handler$logger->pushHandler(new StreamHandler(__DIR__.'/my_app.log', Logger::DEBUG));$logger->pushHandler(new FirePHPHandler());// 开始使用$logger->addInfo('My logger is now ready');
最初のステップは、Logger インスタンスを作成し、チャネル名を渡すことです。このチャネル名は、複数の Logger インスタンスを区別するために使用できます。
インスタンス自体はロギングを処理する方法を知りません。それはハンドラーによって処理されます。たとえば、上記の例では 2 つのハンドラーを設定し、2 つの異なる方法でログ レコードを処理できます。
なお、ハンドラーはスタックに保存されるため、後から追加したハンドラーがスタックの一番上に位置し、最初に呼び出されます。
追加データを追加する
Monolog には、ログに追加情報を追加する 2 つの方法があります。
コンテキストを使用する
最初の方法は、$context パラメーターを使用し、配列で渡すことです。
php<?php$logger->addInfo('Adding a new user', array('username' => 'Seldaek'));
プロセッサを使用する
2 番目の方法は、プロセッサを使用することです。プロセッサは、ログ レコードをパラメータとして受け取り、追加部分を処理して変更した後に戻る、呼び出し可能なメソッドであればどれでも使用できます。
php<?php$logger->pushProcessor(function ($record) { $record['extra']['dummy'] = 'Hello world!'; return $record;});
Processor は Logger インスタンスにバインドする必要はありませんが、特定のハンドラーにバインドすることもできます。ハンドラーインスタンスのpushProcessorメソッドを使用してバインドします。
チャネルの使用
ログはチャネル名を使用して分類でき、大規模なアプリケーションで非常に役立ちます。ログレコードはチャンネル名から簡単に選択できます。
たとえば、異なるモジュールのログを同じログ ファイルに記録したい場合、同じハンドラーを異なる Logger インスタンスにバインドでき、これらのインスタンスは異なるチャネル名を使用します。関数内 実用的なハンドラー。ほぼすべての種類の使用シナリオをカバーします。以下にその一部を示します。
StreamHandler: 主にログ ファイルに使用される、PHP ストリームにレコードを書き込みます。SyslogHandler: syslog にレコードを書き込みます。
ErrorLogHandler: PHP エラー ログにレコードを書き込みます。NativeMailerHandler: PHP の mail() 関数を使用してログ レコードを送信します。
SocketHandler: ソケット経由でログを書き込みます。
php<?phpuse Monolog\Logger;use Monolog\Handler\StreamHandler;use Monolog\Handler\FirePHPHandler;// 创建handler$stream = new StreamHandler(__DIR__.'/my_app.log', Logger::DEBUG);$firephp = new FirePHPHandler();// 创建应用的主要logger$logger = new Logger('my_logger');$logger->pushHandler($stream);$logger->pushHandler($firephp);// 通过不同的频道名创建一个用于安全相关的logger$securityLogger = new Logger('security');$securityLogger->pushHandler($stream);$securityLogger->pushHandler($firephp);
AmqpHandler: amqp プロトコルと互換性のあるサービスにレコードを書き込みます。
BrowserConsoleHandler: ログレコードをブラウザコンソールに書き込みます。ブラウザのコンソールオブジェクトを使用するため、ブラウザがサポートしているか確認する必要があります。
RedisHandler: Redis にレコードを書き込みます。 MongoDBHandler: Mongo にレコードを書き込みます。
ElasticSearchHandler: ElasticSearch サービスにレコードを書き込みます。
BufferHandler: ログ レコードをキャッシュし、それらをすべて一度に処理できるようにします。
更多的Handler请看https://github.com/Seldaek/monolog#handlers。
Formatter
同样的,这里介绍几个自带的Formatter:
LineFormatter:把日志记录格式化成一行字符串。
HtmlFormatter:把日志记录格式化成HTML表格,主要用于邮件。
JsonFormatter:把日志记录编码成JSON格式。
LogstashFormatter:把日志记录格式化成logstash的事件JSON格式。
ElasticaFormatter:把日志记录格式化成ElasticSearch使用的数据格式。
更多的Formatter请看https://github.com/Seldaek/monolog#formatters。
Processor
前面说过,Processor可以为日志记录添加额外的信息,Monolog也提供了一些很实用的processor:
IntrospectionProcessor:增加当前脚本的文件名和类名等信息。
WebProcessor:增加当前请求的URI、请求方法和访问IP等信息。
MemoryUsageProcessor:增加当前内存使用情况信息。
MemoryPeakUsageProcessor:增加内存使用高峰时的信息。
更多的Processor请看https://github.com/Seldaek/monolog#processors。
扩展handler
Monolog内置了很多handler,但是并不是所有场景都能覆盖到,有时需要自己去定制handler。写一个handler并不难,只需要实现Monolog\Handler\HandlerInterface这个接口即可。
下面这个例子实现了把日志记录写到数据库里。我们不需要把接口里的方法全部实现一次,可以直接使用Monolog提供的抽象类AbstractProcessingHandler进行继承,实现里面的write方法即可。
php<?phpuse Monolog\Logger;use Monolog\Handler\AbstractProcessingHandler;class PDOHandler extends AbstractProcessingHandler{ private $initialized = false; private $pdo; private $statement; public function __construct(PDO $pdo, $level = Logger::DEBUG, $bubble = true) { $this->pdo = $pdo; parent::__construct($level, $bubble); } protected function write(array $record) { if (!$this->initialized) { $this->initialize(); } $this->statement->execute(array( 'channel' => $record['channel'], 'level' => $record['level'], 'message' => $record['formatted'], 'time' => $record['datetime']->format('U'), )); } private function initialize() { $this->pdo->exec( 'CREATE TABLE IF NOT EXISTS monolog ' .'(channel VARCHAR(255), level INTEGER, message LONGTEXT, time INTEGER UNSIGNED)' ); $this->statement = $this->pdo->prepare( 'INSERT INTO monolog (channel, level, message, time) VALUES (:channel, :level, :message, :time)' ); }}
然后我们就可以使用它了:
php<?php$logger->pushHandler(new PDOHandler(new PDO('sqlite:logs.sqlite'));// You can now use your logger$logger->addInfo('My logger is now ready');
参考
https://github.com/Seldaek/monolog

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。
