[.net] トレースとログの関係、そしてlog4netはどのように適合していますか?



2 Answers

IMO ...

ロギングは開発用のデバッグ用に設計するべきではありません (ただし必然的に使用されます)
ロギングは、 運用の監視とトラブルシューティングのために設計する必要があります。これはその存在理由です。

トレースは開発のデバッグとパフォーマンスのチューニング用に設計する必要があります。 現場で利用可能な場合は、実際に低レベルのトラブルシューティングに使用できますが、それはその主な目的ではありません

このことを考えると、過去に私が見た(そして設計した/実装した)最も成功したアプローチは、2つを一緒に組み合わせることはありません 。 2つのツールを別々に保つ方が良いでしょう。

Question

私は、ロギングとトレースの違いについて何か不思議です。

違いは基本的に、トレースはより詳細なログであるため、開発者は実行時にアプリケーションをデバッグするためのツールを提供できますか?

私はlog4netを実験し、ロギングを行っています。 今私はトレースをやっていなければならないかどうか、そしてその目的のためにlog4netを使うことができるかどうかを考えています。 私はlog4netでトレースを行っているべきですか?また、log4netロガーのトレースレベルがありますか? デバッグとトレースの目的で別のログレベルを使用する必要がありますか、同じものを使用することはできますか? 単純な方法のためにロギングとトレースを行う方法の簡単な例を挙げられますか?

編集:以下のいくつかの有用な回答にもかかわらず、私はトレースとログをどうやって行うべきかまだ分かりません。

私は自分のビジネス層に以下のメソッドを持っていて、それにロギング/トレースを追加したいと思います。 私はそれを効率的にやり遂げる方法が不思議です。 次の方法は、ロギング/トレースの観点から受け入れられますか? ログメッセージはDebugの代わりにInfoのタイプでなければなりませんか? ログに記録されているデバッグメッセージはトレースと見なされますか? どのようにそれを変更しますか?


IEnumerable<Car> GetCars()
{
   try
   {
      logger.Debug("Getting cars");
      IEnumerable<Car> cars = CarAccessor.GetCars().ConvertAll(DataAccessToBusinessConverter);
      logger.Debug("Got total of " + cars.Count + " cars"); 
   } catch (Exception e) {
      logger.Error("Error when getting cars", e);
      throw new Exception("Unexpected error when getting cars");
   }
}




ロギングはトレースではありません 。 これらの2つは、異なるパフォーマンス特性を持つ異なるライブラリでなければなりません。 実際には、トレースを有効にしたメソッドが例外を残しているときに例外を自動的にトレースできるという独自のプロパティを持つ、自分自身でトレースライブラリを作成しました。 これ以外にも、コード内の特定の場所で例外を発生させるために問題をエレガントに解決することは可能です。




ロギング!=デバッグ

クライアントとの問題を解決するためにログファイルを保管する必要があることもあり、サーバー側で何が起きたかがわかります。






Related