質問

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

C ++ソースでは、次のように記述できます

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

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

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

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

役に立ちましたか?

解決

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

System.Diagnostics.Trace

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

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

他のヒント

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

もう1つの優れたロギングライブラリは、 NLog です。これは、ファイル、データベース、イベントロガーなど。

Object Guyのロギングフレームワークを使用します。この男には、興味深いコメントがあります。

エンタープライズライブラリは、 log4net を使用すると、他の機能も多数提供します(キャッシュ、例外処理、検証など)。ビルドするほぼすべてのプロジェクトで使用します。

強くお勧めします。

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

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

別のスレッドで述べたように、 Object Guyのロギングフレームワークを複数使用しています数年間の実稼働アプリ。使用と拡張が非常に簡単です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

組み込みの.NETロギングを使用できます。 TraceSourceとTraceListenersを調べます。これらは.configファイルで設定できます。

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

さらに、ロギングのためのSystem.Diagnosticsメソッドの使用に関するいくつかのコメントに加えて、 DebugView ツールは、必要なときにデバッグ出力を確認するのに非常に便利です。必要な場合を除き、アプリでログファイルを生成する必要はなく、起動するだけです。必要に応じてDebugView。

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top