50

ロギングとトレースの違いについて疑問に思っています。

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

私は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");
   }
}

4

7 に答える 7

26

ロギングは、情報を記録するための一般的な用語です。トレースは、デバッグに使用されるロギングの特定の形式です。

.NET では、System.Diagnostics.Trace および System.Diagnostics.Debug オブジェクトを使用して、app.config で構成できる多数の "イベント リスナー" に簡単にログを記録できます。また、TraceSwitches を使用して構成およびフィルター処理を行うこともできます (たとえば、エラーと情報レベルの間で)。

private void TestMethod(string x)
{
    if(x.Length> 10)
    {
        Trace.Write("String was " + x.Length);
        throw new ArgumentException("String too long");
    }
}

ASP.NET には、特別なバージョンの Trace (System.Web.TraceContext) があり、ASP ページまたは Trace.axd の下部に書き込みます。ASP.NET 2+ には、ヘルス モニタリングと呼ばれるより完全なログ フレームワークもあります。

Log4Net は、組み込みの Trace や ASP Health Monitoring よりも豊富で柔軟なトレースまたはログ記録の方法です。Diagnostics.Trace と同様に、config.xml でイベント リスナー (「アペンダー」) を構成します。単純なトレースの場合、組み込みの Trace のように使用は簡単です。Log4Net を使用するかどうかの決定は、より複雑な要件があるかどうかによって決まります。

private void TestMethod(string x)
{
    Log.Info("String length is " + x.Length);
    if(x.Length> 10)
    {
        Log.Error("String was " + x.Length);
        throw new ArgumentException("String too long");
    }
}
于 2008-10-05T19:45:39.807 に答える
13

IMO...

ロギングは、開発のデバッグ用に設計されるべきではありません(しかし、必然的にそのように使用されます) ロギングは、運用監視とトラブルシューティング用
に設計されるべきです。これがその存在理由です。 トレースは、開発のデバッグとパフォーマンス チューニング用に設計する必要があります。現場で利用できる場合は、非常に低レベルの運用上のトラブルシューティングに使用できますが、それは主な目的ではありませ. 2つ一緒に。2 つのツールを別々にして、それぞれが 1 つのジョブをできる限り実行することをお勧めします。



于 2008-10-05T19:33:23.153 に答える
11

log4net は両方に適しています。DEBUG ログ レベルを使用して、リリース後の診断に役立つログと開発目的の "トレース" を区別します。具体的には、開発者は を使用してトレース出力 (開発中にのみ関心のあるもの) をログに記録しますDebug()。開発構成では、レベルを DEBUG に設定します。

<root>
        <level value="DEBUG" />
        ...
</root>

製品がリリースされる前に、レベルは「INFO」に変更されます。

<level value="INFO" />

これにより、リリース ログからすべての DEBUG 出力が削除されますが、INFO/WARN/ERROR は保持されます。

上記の単純な方法が非常に効果的であることがわかったため、フィルター、階層 (名前空間による) ロギング、複数のターゲットなど、他の log4net ツールがあります。

于 2008-10-05T19:18:24.527 に答える
8

Logging は Tracing ではありません。これら 2 つは、異なるパフォーマンス特性を持つ異なるライブラリである必要があります。実際、トレースが有効になっているメソッドに例外が残っている場合に、例外を自動的にトレースできるという独自のプロパティを使用して、 1 つのトレース ライブラリを自分で作成しました。これに加えて、コード内の特定の場所で例外をトリガーする問題を洗練された方法で解決することができます。

于 2010-07-21T10:58:58.673 に答える
4

はい。ログ記録は、過去に何が起こったのかを判断する唯一の方法です。顧客から電話があり、期待どおりに何かが起こらなかったと言われた場合、ログがなければ、肩をすくめてエラーを再現してみることしかできません。それが不可能な場合もあります (ソフトウェアの複雑さと顧客データへの依存度によって異なります)。

監査のためのロギングの問題もあります。ユーザーが行っていることに関する情報を含むログ ファイルを書き込むことができるため、それを使用して、問題をデバッグする可能性を絞り込んだり、ユーザーの主張を検証したりすることもできます (システムが壊れている、xyz が発生しなかったというレポートを取得します。ログを調べて、オペレーターがプロセスの開始に失敗したか、適切なオプションをクリックして動作させなかったかを確認できます)

次に、ほとんどの人がロギングの目的と考えているレポート用のロギングがあります。

ログ出力を調整できる場合は、すべてをログに入れて、書き込まれるデータの量を減らしたり増やしたりします。出力レベルを動的に変更できれば完璧です。

パフォーマンスの問題に応じて、ログを書き込む任意の手段を使用できます。テキスト ファイルへの追加は、最も移植性が高く、最も簡単に表示でき、(非常に重要なことですが) 必要なときに最も簡単に取得できる方法です。

于 2008-10-05T18:26:26.330 に答える
0

ロギング != デバッグ

クライアントの問題を解決するために、ログ ファイルを保持することが必要な場合があります。ログ ファイルは、サーバー側で何が起こったかを証明します。

于 2008-10-05T18:10:27.610 に答える
0

また、どのような情報がログまたはトレースされるかを検討してください。これは、機密情報の場合に特に当てはまります。

たとえば、通常は次のようなエラーをログに記録しても問題ありませんが、

「ユーザー 'X' がアクセスを試みましたが、パスワードが間違っているため拒否されました」,

というエラーをログに記録することはできません

「ユーザー 'X' はアクセスを試みましたが、パスワード 'secret' が正しくないため拒否されました。」

このような機密情報をトレース ファイルに書き込むことは許容される場合があります (そして、本番環境での拡張トラブルシューティングのためにトレースを有効にするよう顧客/ユーザーに依頼する前に、"何らかの手段" でその事実について顧客/ユーザーに警告します)。ただし、ロギングについては、そのような機密情報は決して書き込まないというポリシーを常に持っています(つまり、log4netのレベルINFO以上)。

もちろん、これはコードレビューによって強制され、チェックされなければなりません。

于 2008-10-06T06:07:40.690 に答える