symfony ログ ファイルは、すべての環境で同じ方法でフォーマットされます。これは、 dev.log
人間ではなくマシン用に最適化されていることを意味します。その結果、ログ ファイルが無駄な情報で肥大化し、生産性が低下します。
EasyLogHandlerは、人間にとって使いやすいログ ファイルを作成する新しい Monolog ハンドラーです。ログ情報を明確かつ簡潔に表示するように最適化されています。開発環境でこれを使用すると、開発者の生産性がさらに高まります。
特徴
インストール
構成と使用法
これらはEasyLogHandlerの優れた機能の一部であり、EasyLogHandler とデフォルトの Symfony ログとの比較です。
symfony のログ ファイルは膨大なテキスト ストリームです。これらを開くと、リクエストがいつ開始または終了したか、どのログ メッセージが属するかを簡単に判断することはできません。
シンフォニー | EasyLogHandler |
---|---|
EasyLogHandler は、別の方法でログ ファイルを構造化します。
各リクエスト ログを区切るために、大きなヘッダーといくつかの新しい行が追加されます。
リクエストの重要性が低い場合 (Assetic リクエストなど)、ヘッダーはよりコンパクトになり、表示される情報は少なくなります。
ログ メッセージは内部で分割されているため、メッセージのさまざまな部分 (リクエスト、原則、セキュリティなど) をよりよく理解できます。
まず、EasyLogHandler はすべてのログ メッセージにタイムスタンプを表示しません。 dev
環境ではそれを気にする必要はないため、タイムスタンプはログ メッセージのグループごとに 1 回だけ表示されます。
シンフォニー | EasyLogHandler |
---|---|
ログに関する詳細を追加するために一部のログ メッセージに含まれるextra
情報は、以前のログと異なる場合にのみ表示されます。対照的に、Symfony は常にすべてのログのextra
を表示し、多くの重複した情報を生成します。
シンフォニー |
---|
EasyLogHandler |
---|
ログ メッセージ内で実際の値の代わりにプレースホルダーを使用することがますます一般的になりつつあります (例: 一致したMatched route "home".
Matched route "{route}".
これは、異なる点のみが異なる類似のメッセージをグループ化できるため、マシンにとっては最適です。プレースホルダーの値。
しかし、人間にとってこの「特徴」は厄介なものです。そのため、EasyLogHandler はログ メッセージに含まれるプレースホルダーを自動的に置き換えます。
シンフォニー |
---|
EasyLogHandler |
---|
非推奨やセキュリティ関連のメッセージなどの重要な要素は、すぐに見つけられるようにログ ファイル内で目立つようにする必要があります。ただし、Symfony ではすべてのログがまったく同じに見えます。どれが重要なものかをどうやって知ることができますか?
シンフォニー |
---|
(すべてのメッセージはまったく同じに見えます) |
EasyLogHandler |
---|
(非推奨、警告、エラー、セキュリティ メッセージが目立ちます) |
通常、ログ メッセージには、 context
内の関連変数とextra
プロパティが含まれています。これらの変数の内容をログ ファイルに表示するには、読みやすさと簡潔さの間のバランスが常に難しいものになります。
EasyLogHandler は、各ログ メッセージに応じてこれらの変数を動的にインライン化する方法を決定します。たとえば、Doctrine のクエリ パラメーターは常にインライン化されますが、リクエスト パラメーターは重要でないリクエストについてはインライン化され、重要なリクエストについてはネストされます。
ログ メッセージにエラー スタック トレースが含まれている場合は、必ず確認してください。ただし、Symfony はスタック トレースをインラインで表示するため、検査することができません。 EasyLogHandler は、それらを適切なスタック トレースとして表示します。
シンフォニー |
---|
EasyLogHandler |
---|
ログ ファイルを検査するときに最もイライラする経験の 1 つは、繰り返しまたは同様のメッセージが連続して大量に表示されることです。提供される情報はほとんどなく、気を散らすだけです。 EasyLogHandler は、すべてのログ メッセージを 1 つずつではなく一度に処理するため、同様の連続したログが存在することを認識します。
たとえば、これは 3 つの連続した翻訳不足メッセージを表示する Symfony ログ ファイルです。
同じメッセージが EasyLogHandler によってどのように表示されるかは次のとおりです。
違いは、通常、数十の連続メッセージを生成する「イベント通知」メッセージの場合にはさらに明らかです。
シンフォニー |
---|
EasyLogHandler |
---|
このプロジェクトは、Symfony バンドルではなく PHP パッケージとして配布されるため、Composer でプロジェクトを要求するだけで済みます。
$ combos require --dev easycorp/easy-log-handler
アプリケーションでこのログ ハンドラー用の新しいサービスを定義します。
新しい Symfony バージョン:
# config/packages/dev/easy_log_handler.yamlservices:EasyCorpEasyLogEasyLogHandler:public: falsearguments: ['%kernel.logs_dir%/%kernel.environment%.log']
古い Symfony バージョン:
# app/config/services.ymlservices:# ...easycorp.easylog.handler:class: EasyCorpEasyLogEasyLogHandlerpublic: falsearguments: - '%kernel.logs_dir%/%kernel.environment%.log'
dev
環境で Monolog 構成を更新して、この新しいハンドラー サービスをラップするバッファー ハンドラーを定義します (理由を理解するには読み続けてください)。この設定は安全にコピーして貼り付けることができます。
新しい Symfony バージョン:
# config/packages/dev/monolog.yamlmonolog:handlers:buffered:type:bufferhandler:easylogchannels:['!event']level:debugeasylog:type:serviceid:EasyCorpEasyLogEasyLogHandler
古い Symfony バージョン:
# app/config/config_dev.ymlmonolog:handlers:buffered:type:bufferhandler:easylogchannels:["!event"]level:debugeasylog:type:serviceid:easycorp.easylog.handler
ほとんどのログ ハンドラーは、各ログ メッセージを個別に処理します。対照的に、EasyLogHandler の高度なログ処理では、各ログ メッセージが他のログを認識する必要があります (たとえば、類似した連続メッセージをマージするなど)。これは、リクエストに関連付けられたすべてのログをバッチで取得して処理する必要があることを意味します。
上記の構成では、 buffered
ハンドラーはすべてのログ メッセージを保存し、それを EasyLog ハンドラーに渡します。EasyLog ハンドラーはすべてのメッセージを一度に処理し、結果をログ ファイルに書き込みます。
buffered
ハンドラーを使用して、ログに記録されるチャネルと除外されるチャネル、およびログに記録されるメッセージのレベルを設定します。