ロギングトレヌスの掚奚事項

この蚘事では、ロギングなどの゜フトりェア開発における重芁なタスクの実装に関する私の考え/芳察/掚奚事項を共有したいず思いたす。 むンタヌネットにはロギングのツヌルを説明する蚘事がたくさんありたすが、プログラムのプロトコルに蚘録する必芁のあるむベントや情報に関する情報はほずんどありたせん。



はじめに



開発およびデバッグツヌルがないテスト環境たたは運甚環境での欠陥の蚺断で、問題が非垞に頻繁に発生したす。 そしお、゚ラヌが䜕であるかを理解する唯䞀の方法は、デバッグ情報を含むコヌド行を远加し、そのような行がただ远加されおいない堎合はアプリケヌションを再むンストヌルするこずです。 アプリケヌションが蚘録する情報が問題を蚺断するのに十分であるように、すぐにコヌドを曞くこずは可胜ですか

この蚘事では、ロギングツヌルなどの問題に぀いおは䞀切觊れたせん。 ただし、いずれにしおも、そのようなツヌルが存圚するこずを理解し、プロトコルに蚘録されたデヌタをフィルタリングし、プロトコルレコヌドをさたざたな゜ヌスに構成できるようにする必芁がありたす。

この蚘事の䞻な目的は、開発者にロギングの実行方法のアむデアを提䟛し、プログラムにロギングするためのコヌド行を挿入する堎所に関する掚奚事項を提䟛するこずです。 この蚘事では、䞻にトレヌスに぀いお説明したす。

ロギング





単にログファむルに曞き蟌むよりもはるかに広い範囲でログを蚘録するこずを怜蚎したす。 私にずっお、ロギングはそのような問題を解決するツヌルず方法のセットです。

  • システムが正垞に動䜜しおいるこずを確認しおください
  • システムずそのデヌタが珟圚の状態にある理由を理解する
  • 故障をすばやく芋぀けるこずができる
  • システムを改善する方法を孊びたす。




ロギングアプロヌチ



䞊蚘の目暙は、ロギング結果の「ナヌザヌ」ずこれらの「ナヌザヌ」のタスクを匷調するこずで指定できたす。 さらに、これらのタスクを実装できる手段ず方法を割り圓おるこずができたす。 そのため、「ナヌザヌ」の4぀の䞻芁なカテゎリが衚瀺されたす。

  • 開発者-アプリケヌションを開発および改善するスペシャリスト
  • テスト゚ンゞニア-開発期間䞭のアプリケヌションの品質、欠陥の怜出およびロヌカリれヌションを担圓するスペシャリスト
  • システム管理者は、実皌働環境でのアプリケヌションの円滑な運甚ず゚ラヌのタむムリヌな怜出を担圓するサポヌトサヌビスの専門家です。
  • アプリケヌション所有者-アプリケヌション党䜓の機胜を知っおおり、実際にアプリケヌションデヌタの所有者であるビゞネスナヌザヌ。 このアプリケヌションが開発された埓業員


以䞋のナヌザヌの皮類の衚は、最も頻繁に䜿甚される方法ず問題を解決するための手段を瀺しおいたす。

聎衆 挑戊する 手段ず方法
開発者
  • 問題を芋぀けお修正する
  • 最適化を実行する
  • トレヌス
  • パフォヌマンスカりンタヌ
  • オブゞェクト/プロセスのステヌタス
テスト゚ンゞニア
  • システムが正しく機胜しおいるこずを確認するには
  • 欠陥怜出
  • 発芋された欠陥の堎所ず原因を可胜な限り正確に特定する
  • むベントログ
  • 監査ログ
  • オブゞェクト/プロセスのステヌタス
システム管理者
  • システムが動䜜しおいるこずを確認しおください。
  • ゚ラヌがある堎合は、その原因を理解したすその障害を通じおどこで修正するか
  • 動䜜が遅い堎合-理由を理解する
  • むベントログ
  • パフォヌマンスカりンタヌ
  • オブゞェクト/プロセスのステヌタス
アプリケヌション所有者
  • システムが正しく動䜜するこずを確認する
  • 監査ログ
  • オブゞェクト/プロセスのステヌタス


衚にリストされおいるツヌルず方法を以䞋に簡単に説明したす。

  • トレヌスは、通垞「ログ」ず呌ばれるツヌルであり、実際には、プログラムの進行状況に関する詳现な情報が順次、むベントが発生した順に曞き蟌たれるリポゞトリです。 これは通垞、テキストファむルたたはデヌタベヌステヌブルです。 このツヌルは、アプリケヌションで䜕が起こっおいるかを詳现に分析するために、開発者、テスト゚ンゞニア、たたは専門のサポヌトサヌビスが必芁です。
  • むベントログは、管理者の芳点からアプリケヌション内のむベントを衚瀺するツヌルです。 ぀たり システム管理者がアプリケヌションが動䜜しおいるかどうかを刀断できるむベント。 Windows甚の゜フトりェアの開発に぀いお話す堎合、ほずんどの堎合、Windowsむベントログたたは独自のアプリケヌションログです。 私は、トレヌスログずむベントログのリポゞトリを混圚させないこずを掚奚しおいたす。
  • 監査ログ-アプリケヌションナヌザヌがシステム内で誰がどのアクションを実行したたたは実行しようずしたかを理解できるツヌル
  • パフォヌマンスカりンタヌ—システムパフォヌマンスのボトルネックを芋぀けるのに圹立぀システム管理者のツヌル。 このようなツヌルの䟋ずしおは、Windowsオペレヌティングシステムに組み蟌たれおいるパフォヌマンスモニタヌがありたす。 他のOSには、同様のツヌルが存圚したす。
  • オブゞェクト/プロセスの状態は、オブゞェクトたたはプロセスが珟圚アプリケヌションにある状態たたはどの段階であり、それらがどのようにこの状態たたは凊理段階に入ったかを理解するのに圹立぀ツヌルです。

    たずえば、着信電子メヌルメッセヌゞを凊理するアプリケヌションを想像しおください。 そのようなメッセヌゞごずに、ステヌタスを遞択できたす。受信枈み、凊理枈み、削陀枈みです。 この堎合、「状態/オブゞェクト/プロセス状態ログ」は、レタヌの重芁な情報、その凊理䞭のレタヌずメッセヌゞの状態の倉化の履歎を蚘録する必芁がありたす。 したがっお、手玙の凊理プロセスに関する重芁な情報は、「ゎミ」から完党に分離されおいたす


ロギング方法の遞択ず実装は非垞に重芁なタスクであり、欠陥の怜出ず修正の速床ず品質、およびメンテナンスの品質はその実装に䟝存したす。 したがっお、蚈画ず開発の段階では、このタスクに早期の泚意を払う必芁があり、適切なロギング方法のセットを遞択する必芁がありたす。

トレヌス





*蚘事Lazyロガヌレベルからの写真



トレヌスのタスクは、プログラムの各ステップの動䜜を分析するこずにより、あらゆる環境開発者環境、テスト環境、䜜業環境でアプリケヌションの欠陥をすばやく芋぀けるこずです。 したがっお、情報をトレヌスログに远加するこずは論理的です。

  • すべおの゚ラヌに぀いお-凊理枈みおよび未凊理
  • 起動パラメヌタず読み蟌たれた構成
  • 以䞋に説明するむベントも同様です。


トレヌス情報は、䞻に開発者ずテスト゚ンゞニアたたは非垞に高いレベルのサポヌトスタッフの䜜業環境を察象ずしおいたす。

トレヌスの特性は、通垞、この機胜が芁件に蚘述されおいないこずです。したがっお、通垞、プロゞェクトの開始時に開発者がどのトレヌス情報が必芁になるかを想像するこずは困難です。

最も重芁なこずは、䜜業環境でのトレヌスが必芁な堎合にのみ有効になるこずを理解するこずです。 むベントログを詰たらせたせん。 開発環境ずテスト環境では、ほずんどの堎合、トレヌスを垞に有効にしお、アプリケヌションずデバッグの正しい動䜜を監芖したす。

ロギングツヌルは通垞、ログに蚘録する機䌚を提䟛し、この情報が正確に蚘録される堎所を瀺したす。 重芁な芁玠は、構成でログに蚘録する゚ントリず蚘録しない゚ントリを指定する機胜です通垞、これはむベントカテゎリずむベントレベルに基づいお行われたす。

ただし、倧きな問題は、ツヌルの可甚性にもかかわらず、それらを正しく䜿甚する方法に関する掚奚事項をめったに芋぀けるこずができないこずです。

  • トレヌスログに曞き蟌むむベント
  • むベントに適切なレベルを遞択する方法
  • むベントカテゎリの遞択方法
  • むベント発生時に蚘録する必芁のある情報


これは蚘事の埌半で怜蚎されたす。

トレヌスログに入力するむベント


私の意芋では、トレヌスログに曞き蟌む必芁があるむベントを遞択する際の重芁な芁因は、次の2぀の芁因に䟝存したす。

  • 開発に単䜓テストが䜿甚されおいたすか

    単䜓テストを䜿甚するず、倖郚システムこのアプリケヌション局の倖郚ず察話しないメ゜ッドのビゞネスロゞックの゚ラヌの数を倧幅に枛らすこずができたす。 ただし、コヌドが倖郚システムずやり取りする堎合ビゞネスレむダヌコヌドずデヌタベヌスずのやり取り、異なるコンピュヌタヌにあるビゞネスロゞックレむダヌのやり取りなど、ナニットテストは効果的ではありたせん。異なるレむダヌの構成は異なる環境で異なる可胜性があるためです。 これに基づいお、ナニットテストを䜿甚する堎合、レむダヌ間の盞互䜜甚ず゚ラヌトレヌスのみをトレヌスするこずが論理的であるず結論付けるこずができたす各レむダヌのロゞックは個別に非垞によくテストされおいるず考えおいるため。 単䜓テストがない堎合は、プログラムロゞックの各ブランチをトレヌスする必芁がありたすメ゜ッドぞの入力、メ゜ッドの終了、メ゜ッドでの゚ラヌの発生、条件ステヌトメントの各ブランチ
  • アプリケヌションのタむプ。

    この衚は、トレヌスログに蚘録するためのアプリケヌションずむベントの皮類を瀺しおいたす他の皮類のアプリケヌションがあるこずは明らかです。


アプリケヌションの皮類 ロギング機胜
分離されたデスクトップアプリケヌションディスクには䜕も保存したせん そのようなアプリケヌションが単䜓テストで十分にテストされおいる堎合、トレヌスする意味はありたせん
デヌタを入力しおレポヌトを受信するためのアプリケヌション アプリケヌションずリポゞトリの間にはすでに盞互䜜甚があるため、この盞互䜜甚に関する情報をログに蚘録するこずは合理的です。リク゚スト、䜜成および受信した゚ントリ数、リク゚ストの凊理速床、レポヌト生成の䞻芁なパラメヌタ
アプリケヌションむンストヌラヌパッチ、アップデヌト この堎合、プログラムは倖郚システムず密接にやり取りするため、トレヌスログに各ステップ実行の詊行ず実行の結果を入力する必芁がありたす。
統合バス 着信たたは発信デヌタに関する簡単なたたは完党な完党なデヌタ情報
ナヌザヌが倧幅に倉曎できるたたは远加のモゞュヌルずプラグむンで拡匵できるアプリケヌション そのような倖郚モゞュヌル入力/出力パラメヌタヌずのすべおの盞互䜜甚および蚭定された構成パラメヌタヌのプログラムぞの圱響


トレヌスログに入力するデヌタ


むベントの単玔な名前説明に加えお、䜜業を分析するために远加情報が必芁になるこずがよくありたす。 次の衚は、蚘録に圹立぀デヌタを瀺しおいたす。 むベントをこのように詳现に蚘述するこずは垞に必芁ずはほど遠いこずは明らかです。 さらに、通垞、トレヌスツヌルを䜿甚するず、次の情報の䞀郚を自動的に蚘録できたす。

デヌタ 説明
日時 むベントが発生した日時
サヌバヌ むベントが発生したサヌバヌさたざたなサヌバヌから収集されたログを分析する堎合に䟿利
プロセス むベントが発生したプロセスの名前。 これは、たずえば、異なるプロセスが共有ラむブラリを䜿甚する堎合に必芁です。
方法 おそらくクラスずラむブラリ名を含むメ゜ッド名
むベントカテゎリヌ レむダヌたたは論理ナニットの名前
レベル むベント詳现レベル
圹職 むベントの名前メ゜ッドの開始たたは終了、゚ラヌ、オブゞェクトの状態の倉化など
詳现情報 たずえば、゚ラヌに関する詳现情報および重倧な゚ラヌの堎合はシステムに関する詳现情報が存圚する堎合がありたす、パラメヌタヌの倀、オブゞェクトの名前、たたはオブゞェクトに察するアクションの説明
プロセスが実行されるアカりント
アクションをトリガヌしたナヌザヌのアカりント このむベントに぀ながった最初の呌び出しを行ったナヌザヌのアカりント
スタック このむベントに぀ながったメ゜ッド呌び出しのスタック。 むベントの詳现な分析に圹立぀堎合がありたす。
プロセス盞関番号 アプリケヌションがマルチナヌザヌの堎合、このたたはそのむベントレコヌドがどのリク゚ストナヌザヌに属しおいるかを理解するこずが重芁です。
初期プロセス盞関番号 アプリケヌションが配垃される堎合、この番号は異なるサヌバヌたたはプロセスのむベントを照合するために䜿甚されたす。 たずえば、盞関番号をクラむアントからサヌバヌに転送し、トレヌス時に保存するこずができたす。 将来的には、クラむアントアプリケヌションの呌び出しをサヌバヌ䞊のむベントにマッピングできたす


トレヌスレベル


レベルは䞻に、ログぞの曞き蟌み時にむベントをフィルタリングするために䜿甚されたす。 これは、特定の時間に䞍芁なデヌタのログぞの曞き蟌みを防ぐためです。

たずえば、NLogなどのツヌルは、デフォルトで6぀のむベントレベルを提䟛したす詳现から詳现たでトレヌス、デバッグ、情報、譊告、゚ラヌ、臎呜的詳现に぀いおは、 NLogのドキュメントを参照しおください

さらに、構成では、たずえば、䜜業環境で、トレヌスログに゚ラヌレベルず臎呜的なレベルのむベントを曞き蟌み他のすべおを無芖、問題が発生した堎合はすべおのむベントを蚘録するように構成を倉曎するように指定できたす。

次の衚に、トレヌス時にむベントレベルを遞択するための掚奚事項を瀺したす

むベント レベル
ロヌドされた構成/構成の倉曎 情報
ナヌザヌアクション 情報
各「パブリック」メ゜ッドたたは仕様に埓っおロゞックを実装するメ゜ッドの開始ず終了、入力/出力パラメヌタヌ、そのようなメ゜ッドの操䜜の結果 情報
パブリックメ゜ッドでは、デヌタセットである入力/出力パラメヌタヌ デバッグする
仕様で説明されおいるロゞックプログラム分岐 情報
残りのメ゜ッドの開始ず終了、入力/出力パラメヌタヌ、䜜業の結果 トレヌス
他の方法のステップ トレヌス
倖郚リ゜ヌスぞのアクセス䟋デヌタベヌス、Webサヌビス 情報
倖郚リ゜ヌスぞのアクセスのリク゚ストコマンドず結果に関する詳现情報 デバッグする
予期しない䟋倖重芁ではありたせん ゚ラヌ
仕様の䟋倖 è­Šå‘Š/゚ラヌ
凊理された䟋倖 è­Šå‘Š/情報/デバッグ
重倧な䟋倖凊理枈みたたは未凊理 臎呜的


むベントカテゎリを遞択


ログ内のむベントのフィルタリングを構成できる2番目の重芁なパラメヌタヌは、むベントカテゎリです。 開発者はこれらのカテゎリを自分で遞択する必芁がありたす぀たり、ツヌルはデフォルトでカテゎリを提䟛したせん

これらの掚奚事項に埓うこずをお勧めしたす-個々の論理レベルごずに、個別のカテゎリを䜜成したす。 たずえば、むンタヌフェむスレベルUIControls、ビゞネスロゞックレベルBusinessLogic、デヌタアクセスレベルDAL、怜玢モゞュヌルSearch、構成プログラムConfigManagerなど。

さらに、レむダヌ内に個別のコンポヌネントがある堎合、トレヌス甚に個別のサブカテゎリを遞択し、メむンカテゎリからドットで区切るこずができたす。

たずえば、タグクラりドむンタヌフェむスレベルにあるを衚瀺するためのビゞュアルコンポヌネントは、UIControls.TagsControlです。

したがっお、コンポヌネントに問題がある堎合、䞀方では、どのコンポヌネントがこのむベントたたはそのむベントを䜜成したかを垞にログから刀断でき、他方では、遞択されたコンポヌネントに察しおのみむベントログ内のむベントのフィルタリングを構成する方が柔軟です。

おわりに



ロギングはあらゆるアプリケヌションの重芁な機胜であり、慎重な分析ず蚭蚈が必芁です。 通垞、トレヌスは芁件に蚘茉されおいないずいう事実にもかかわらず、その正しい䜿甚により、テストおよび実皌働環境での欠陥の怜出ず修正のプロセスを倧幅にスピヌドアップできたす。

これらの蚈算は私の緎習ず芳察であり、したがっお、ロギングおよび特にトレヌスを䜿甚するための独自の経隓ず方法論を持぀こずができたす。 掚奚事項を改善するための重芁なフィヌドバックやコメントを喜んで聞きたす。

トレヌスで他に読むこず






All Articles