web-dev-qa-db-ja.com

C#でのエラーログ

C++のコーディングからC#に切り替えています。 C++エラーロギング/レポートマクロシステムをC#で類似したものに置き換える必要があります。

私のC++ソースで私は書くことができます

LOGERR( "Some error");またはLOGERR( "入力%sおよび%dのエラー"、stringvar、intvar);

マクロとサポートライブラリコードは、ソースファイル、ソース行、ユーザー名、および時刻とともに、(おそらく可変引数の)フォーマットされたメッセージをデータベースに渡します。同じデータは、後でユーザーに報告するためにデータ構造に詰め込まれます。

この基本的なエラー報告/ロギングを行うサンプルへのC#コードスニペットまたはポインタはありますか?

編集:この質問をしたとき、私は.NETを初めて使い、System.Diagnostics.Traceを知らなかった。 System.Diagnostics.Traceは、当時私が必要としていたものでした。それ以来、ロギング要件がより大きく複雑なプロジェクトでlog4netを使用しています。 500行のXML構成ファイルを編集するだけで、log4netが必要なことをすべて実行します:)

73
Rodney Schuler

ここにはたくさんのlog4net支持者がいるので、これは無視されると確信していますが、自分の好みを追加します。

_System.Diagnostics.Trace
_

これには、Trace()メソッドをリッスンしてからログファイル/出力ウィンドウ/イベントログに書き込むリスナーが含まれます。フレームワークに含まれるのは、DefaultTraceListenerTextWriterTraceListener、およびEventLogTraceListenerです。レベル(警告、エラー、情報)およびカテゴリを指定できます。

MSDNのトレースクラス
Webアプリケーションのイベントログへの書き込み
dpTraceListener-log4net互換のXMLメッセージをlog2consoleなどのログビューアーに書き込みます

72
Chris S

log4Net をご覧になることを強くお勧めします。この post は、開始するために必要なものの大部分をカバーしています。

41
Mitch Wheat

もう1つの優れたロギングライブラリは NLog です。これは、ファイル、データベース、イベントロガーなど、さまざまな場所にログを記録できます。

15

Object Guyのログフレームワーク -を使用します。この男には、興味深い点がいくつかあります comments .

14
TheRaven

Enterprise Librarylog4net に代わる堅実な代替手段であり、他の多くの機能(キャッシング、例外処理、検証など)も提供します。ビルドするほぼすべてのプロジェクトで使用します。

強くお勧めします。

11
Eric Schoonover

別のスレッドで述べたように、私たちは The Object Guy's Logging Framework を複数の本番アプリで数年間使用しています。使用と拡張が非常に簡単です。

5
S. Mills

個人的には嫌いですが、 log4net はC#ロギングの事実上の標準のようです。サンプル使用法:

log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Error(“Some error”);
log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar);
5
Ben Hoffstein

Serilog はここではパーティーに遅れていますが、テーブルにいくつかの興味深いオプションがあります。これは、使用する古典的なテキストベースのロガーによく似ています。

Log.Information("Hello, {0}", username);

ただし、以前のフレームワークとは異なり、テキストを記述するときにメッセージと引数のみを文字列にレンダリングします。ファイルまたはコンソールに。

考えは、ログに「NoSQL」スタイルのデータストアを使用している場合、次のようなイベントを記録できるということです。

{
    Timestamp: "2014-02-....",
    Message: "Hello, nblumhardt",
    Properties:
    {
        "0": "nblumhardt"
    }
}

.NET形式の文字列構文が拡張されているため、上記の例を次のように記述できます。

Log.Information("Hello, {Name}", username);

この場合、プロパティの名前はName0ではなく)になり、クエリと相関が容易になります。

ストレージにはすでにいくつかの優れたオプションがあります。 MongoDBとAzure Table Storageは、DIYで非常に人気があるようです。私はもともとSerilogを構築しました(コミュニティプロジェクトですが)。現在、 Seq という製品に取り組んでいます。これは、これらの種類の構造化ログイベントのストレージとクエリを提供します。

3

Log4Net は、さまざまなレベル(デバッグ、エラー、致命的)にログを記録し、これらのログステートメントをさまざまな場所(ローリングファイル、Webサービス、Windowsエラー)に出力できる、かなり包括的なロギングフレームワークです

ロガーのインスタンスを作成することで、どこにでも簡単にログインできます

private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));

そして、エラーを記録します。

_log.Error("Error messsage", ex);
3
FryHard

組み込みの.NETロギングを使用できます。 TraceSourceとTraceListenersを調べてください。これらは.configファイルで構成できます。

2
CSharpAtl

ロギングのためのSystem.Diagnosticsメソッドの使用に向けたいくつかのコメントに加えて、 DebugView ツールは、必要な場合にデバッグ出力を確認するのに非常に便利であることを指摘したいと思います。アプリがログファイルを生成する必要はありません。必要に応じてDebugViewを起動するだけです。

1
Chris Ballard

ExceptionLess は、ロギングに使用できる最も簡単なnugetパッケージの1つです。 オープンソース プロジェクト。未処理の例外は自動的に処理され、 manually logs のオプションが利用可能です。オンラインまたは self Host にローカルサーバーでログインできます。

1
gmsi

System.Diagnosticsのビルトイントレースは.NET Frameworkでは問題なく、多くのアプリケーションで使用しています。ただし、log4netを使用する主な理由の1つは、組み込みの.NET Frameworkトレースには、log4netが既に提供している便利なフル機能のアペンダーの多くがないことです。

たとえば、VB.NET dllにあるもの以外に、.NET Frameworkで定義された優れたローリングファイルトレースリスナーはありません。

開発環境によっては、サードパーティのツールが利用できない場合を除き、log4netを使用することをお勧めします。System.Diagnosticsトレースクラスを使用することをお勧めします。より良いappender/tracelistenerが本当に必要な場合は、いつでも自分で実装できます。

たとえば、多くのお客様は、企業のマシンにインストールする際にオープンソースライブラリを使用しないことを要求しているため、その場合、.NET Frameworkのトレースクラスが最適です。

さらに、- http://www.postsharp.org/ は、コードプロジェクトでここに示すように、ロギングを支援する可能性がある、私が検討しているAOPライブラリです: http:// www .codeproject.com/KB/dotnet/log4postsharp-intro.aspx

1
Wil P

Log4netについても同じです。実際に使用するために、いくつかのオープンソース実装を見て、いくつかの便利な追加を含む実際のコード例を見るのが理にかなっているので、2ビットを追加します。 log4netの場合は、 subtext を見て頭のてっぺんから外すことをお勧めします。特に、アプリケーションの開始ビットとassemblyinfoビットを見てください。

1
Ted

他の人が言ったように、Log4Netはかなり一般的で、Log4jに似ており、Javaを実行する場合に役立ちます。

ロギングアプリケーションブロックを使用するオプションもあります http://www.codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx

0
Mario