私が続くベストプラクティスの記録


私のコーディング経歴の初めに、私は主にログ(印刷声明)を書きました😜) バグを修正した後、問題をデバッグし、それらを削除します.しかし、私がバックエンド開発者になったとき、私は伐採の重要性を理解しました.このブログでは、過去数年間で学んだこと全てを書き留めています.また、ログ文を書いたときのルールについて書きます.

どのような正確なログですか?


レイスマンの言葉では、我々はすべてのログが何か知っているこれは、コンソールやファイルにメッセージ、変数や例外を印刷している.部分的に正しい.しかし、私が感じることは、アプリケーションの状態を記録するメカニズムと、ある時点で撮影したアクションです.
我々がそれについて考えるならば、両方の定義は全く異なります.つは、我々が我々がどこにコードベースにいるかを示していて、2番目が要求フローの現在の状態を示すと示唆します.アプリケーションを開発するときの思考プロセスのこの変更は、より良いロギング文を書くのを助けて、順番に、アプリケーションを改善するのを助けます.

ログのさまざまなレベル


ログのレベルは、あなたがしているチームに基づいて変更することがあります、あなたが使用しているアプリケーション、および最も可能性が高い、あなたが使用しているフレームワーク/言語.最も広く使用されるログレベルはDEBUG , INFO , WARN and ERROR .

デバッグ👨🏻‍💻



名前が示すように、これらのログには、問題をデバッグしようとするときに開発者にとって最も興味深い情報が含まれています.それらは、出願の状態に関する細かな声明である.
当社の生産システムでは、我々は巨大な数を持っているDEBUG ログ、および我々は主にこのレベルを無効にする傾向があります.我々は、必要性が起こるときだけ、これを可能にします.

情報ℹ️


このレベルでのログは、純粋に情報メッセージであり、名前が示すように、アプリケーション内の障害やエラー状態を示すために使用すべきではありません.このログレベルを最大限に利用するには、プライマリインターフェイスが使用できないときに、一般的な情報がアプリケーションエラーを診断するのに有用であることを考慮してください.

警告する⚠️



警告ログは、アプリケーションで何らかの潜在性を引き起こす可能性があるときに使用する必要があります.これらのログは、我々の注意を必要とするかもしれない何かを示す若干の頭を与えます.

エラー🚨



このレベルのログには、アプリケーションの失敗が含まれます.間違ったことができた何かが間違っていて、行動が問題を解決するために誰かによってとられる必要があるとき、エラーログを使用してください.アクションが必要なイベントでは、我々はWARN 代わりにレベル.

どれくらい我々は記録しなければなりませんか?


ログが少ない🔇


実際に我々のシステムにログがほとんどないという危害はありません、しかし、これは何かがそれが少し難しく起こった方法で起こった理由を考え出すでしょう.

ログオール🔊


ログが良いなら、なぜ私たちのコードのすべての行の後にログ文を書くことができませんか?
無理ですか.
どのくらいのログがあまりにも多くのログですか?

これらのタイプの質問はstackoverflowを含む多くのフォーラムで尋ねられましたthis blog そばCoding Horror
私によると、少しの離陸は以下の通りです.
  • ログを追加すると、コードベースが大きくなります.
  • あまりにも多くのログを持つことによって遅くなるあなたのアプリケーションのわずかなチャンスがあります.
  • 私たちがどれくらいログに記録する必要があるかについて、ゴールデンスタンダードはありません.それはすべてのアプリケーションに依存し、誰がコードを書いている.ログを開始することをお勧めしますERROR and WARN レベル、そしてINFO and DEBUG 開発中に必要に応じてログをログ出力します.記録されていることに留意してください.

    その他の伐採

  • 良いログを使用すると、問題をデバッグし、解決するのに役立ちます.
  • 構造化されたログは、私たちはキナナ、Datadogなどの視聴者のログを視覚化するヘルプこれらの視覚的な我々は、アプリケーションをより良いアプリケーションを作るために使用することができます我々のアプリケーションでいくつかのパターンを引き出すのに役立ちます.
  • ログを書くときに続く規則🪵


    それで、我々はログが何であるか、ログの異なるレベルと良いログを持つ利点について読みました.以下は、ログを書くときの日々の原則に従う規則とガイドラインです.それは徹底的でないかもしれません、しかし、ログを書いている間、考慮する異なったものの非常に良い考えを与えなければなりません.

    すべての例外はエラーではありません。


    私は、例外メッセージを記録し、それらをエラーとして分類する習慣がありました.後で、私は、すべての例外がエラーであるというわけではないとわかりました、そして、若干は予想されるかもしれません.これらのいずれかの警告や情報メッセージとして記録することができます.

    アクションが実行された後にログを記録します。


    アクションが実行される前にログを作成すると、アクションがどのようなものになるかについていくつかの文脈情報を与えるかもしれませんが、アクションが成功したかどうかは分かりません.アクションが実行された後にログメッセージを持つと、アクションが実行され、アクションの結果が利用可能であることを知らせます.我々が行動の前後にログインするシナリオが、あります.これは、アクションを完了するためにかかる時間の量を測定するために行われます.

    ログのいずれかまたは例外をスローします。


    としてRSPEC-2139 , 例外をログとスローするのは良い考えではありません.これは、ログファイルのノイズにつながる、同じログの多数を避けるために行われます.

    プロジェクトのログ形式を定義します。


    ログメッセージのための定義済みの構造を持つことはログを読みやすくするでしょう.さらに、この構造は、kibanaやdatadogなどのログビューアでログを視覚化するのに役立ちます.
    ログを書き込むときにログメッセージと変数をマージしないようにしてください.私が続く良いログ形式は
    LOG.level("{Message} {Variables}");
    
    
    いくつかの例
    LOG.info("Fetched the employee data for a company. [companyId={}]", companyId);
    LOG.error("Error occurred while fetching the employee data for the company. [companyId={}]", companyId, e);
    
    

    参考文献

  • コーディングホラーblog on logging
  • コードプロジェクトblog on The Art of Logging