ASP.NET Coreログ

3526 ワード

ASP.NET Coreログ処理


ASP.NET Coreはサポートログを内蔵し、開発者が使いたい他のログフレームワークに簡単に切り替えることができます.DIからILoggerFactoryまたはILoggerを要求すると、アプリケーションにログ機能を追加できます.
参考原文:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging?tabs=aspnetcore1x
ASP.NET Coreは、重要度または重大度の順序付けを増やすことによって、6つのログ・レベルを定義します.
トレースは、最も詳細なログ・メッセージを記録するために使用されます.通常、開発フェーズのデバッグの問題にのみ使用されます.これらのメッセージには、機密のアプリケーションデータが含まれている可能性があります.したがって、本番環境では使用できません.デフォルトでは無効にします.例:Credentials:{"User":"someuser","Password":"P@ssword”}
Debugというメッセージは開発段階で短期間で役に立つ.デバッグに役立つかもしれませんが、長期的な価値はありません.デフォルトでは、これが最も詳細なログです.例:Entering method Configure with flag set to true
Informationというメッセージは、アプリケーションの一般的なプロセスを追跡するために使用されます.Verboseレベルのメッセージとは逆に、これらのログには長期的な価値があるはずです.例:Request received for path/foo
Warningは、アプリケーションにエラーが発生したり、プログラムが停止しない他のプロセス異常や予期せぬイベントが発生した場合に、後で調査するために警告レベルを使用します.警告レベルの例外を共通の場所で処理します.例:Login failed for IP 127.0.0.1またはFileNotFoundException for file foo.txt
Errorアプリケーションが何らかの障害で停止した場合、エラーログを記録する必要があります.これらのメッセージは、アプリケーション範囲の障害ではなく、現在のHTTPリクエストなどの現在のアクティビティまたはアクションを示す必要があります.例:Cannot insert record due to duplicate key violation
Criticalは、アプリケーションまたはシステムがクラッシュし、災害的な障害が発生した場合、すぐに注目する必要がある場合は、重要なレベルのログを記録する必要があります.例:データの消失、ディスク容量の不足など.
適用例:
[HttpGet]
public IEnumerable GetAll()
{
    _logger.LogInformation(LoggingEvents.LIST_ITEMS, "Listing all items");
    EnsureItems();
    return _todoRepository.GetAll();
}

[HttpGet("{id}", Name = "GetTodo")]
public IActionResult GetById(string id)
{
    _logger.LogInformation(LoggingEvents.GET_ITEM, "Getting item {0}", id);
    var item = _todoRepository.Find(id);
    if (item == null)
    {
        _logger.LogWarning(LoggingEvents.GET_ITEM_NOTFOUND, "GetById({0}) NOT FOUND", id);
        return NotFound();
    }
    return new ObjectResult(item);
}

伝達可能なパラメータ:
string dataはメッセージを記録します.
EventId eventIdは、デジタルタイプのidを使用してログをマークし、一連のイベントを相互に関連付けることができます.記録されたイベントIDは、指定されたタイプの時間に固有の静的であるべきである.たとえば、カートに商品を追加したイベントIDを1000とマークし、請求書のイベントIDを1001とマークして、これらのログ記録をスマートにフィルタリングして処理することができます.
string formatログメッセージのフォーマット文字列.
object[]argsは、フォーマットされたオブジェクトのセットに使用されます.
Exception errorは、記録に使用される例外インスタンスです.

ログの使用に関する推奨事項

  • は正しいLogLevelを使用し、これにより、異なる重要レベルのログ・メッセージが関連する出力ターゲットに使用およびルーティングされる.
  • に記録されたログ情報は、問題の所在を直ちに認識し、不要な冗長情報を取り除く必要がある.
  • ログの内容が簡単明瞭で、重要な情報を指していることを保証します.
  • ログレコーダが無効になるとログは記録されませんが、特にループやパフォーマンスに対する要求が高い方法では、ログメソッドの周囲に制御コードを追加して、余分なメソッド呼び出しやログ設定のオーバーヘッドを防止してください.
  • 独自の接頭辞ネーミングログレコーダを使用して、迅速なフィルタリングまたは無効化を確保します.Create拡張メソッドで作成されたログレコーダは、ログレコーダのクラス別名としてクラスの完全な限定名を使用することを忘れないでください.
  • は、動作の開始と終了の境界(例えば、フレームワークが提供するMVC Actionの範囲)を明確にし、相互にネストされないように、役割ドメインを使用する際に慎重に保つ.
  • アプリケーションログコードは、アプリケーションのビジネスに注目する必要があります.ログ・レコーダ自体ではなく、フレームワークに関連する問題をログの詳細レベルで記録します.