2011-01-12 10 views
27

私は、新しい製品ラインで使用するための新しい統一ロギングソリューションに切り替えることを検討しています。スタックオーバーフローに関する人々の考え方を見てみたかったのです。 ASP.net、Windowsサービス、Webサービス、wpfアプリケーションなど、さまざまなアプリケーションのログが必要になります。我々はWindowsのショップのみです。C#ロギング。私は何を使うべきですか?

ログソリューションのための我々の要求の一部を以下に示します。

1)

- Ability to split files up over a certain size 
- Ability to auto archive/delete after certain period of time 

2ファイル管理のログ)記録されたメッセージの特定の種類に電子メールを送信する機能(例えばエラー)

3)Windowsイベントログにメッセージを書き込む能力

- We need to be able to specify where it's being written in the event log. 
    It would also be nice if it would automatically create the event log source if it does exist. 

私はnLog、windowsトレース、およびlog4netを調べ始めました。私はこれらの3に限定されていませんが、検索するときに多く出てきたのはほんの数です。あなたはエンタープライズライブラリを見てみることができます

+1

log4netは、最も一般的に使用されているものであり、これらの要件をすべてサポートしています。それは私が使用するものですが、YMMVです。 – Thorarin

+5

これを試してください:http://stackoverflow.com/search?q=[net]+loggingあなたは興味深い答えをたくさん見つけるでしょう。 –

+0

重複していますが、Cole Wは彼が考えていたいくつかの具体的な要件を提示しています。 – Marijn

答えて

17

log4netは常に良い選択です。

http://logging.apache.org/log4net/

+3

いいえ、実装が簡単なものをお望みなら、それは良い選択ではありません。確かに、すでにlog4netユーザであれば、あなたにとっては簡単かもしれません。前にそれを使用したことのない人にとっては、それを設定するのはお尻の痛みです。 – Pedro

+1

あなた自身のログフレームワークのメチンクを書くよりも、お尻の痛みが少なくて済みます! – RichardOD

+1

@Pedroあなたは*実装していますか?ロガーの設定方法については、app.configの例を参照してください。 –

3

、彼らはロギング用アプリケーションブロックを持って拡張可能である

http://entlib.codeplex.com/

http://entlib.codeplex.com/releases/view/46741

あなたはDEVガイドPDFをダウンロードすることができ、彼らは上のセクションを持っていますログ(第4章)

+0

+1私はリンクを得ていました:) –

+1

私たちはそのウェブサイト上で*非常に悪い経験をしていました - ウェブサーバー上では、ファイルをロギングしてロックしました(つまり別のログに間に合って解放しませんでした)。次のログは、GUIDを名前として持つ他のファイルに行きました...すべてのプロダクション環境では非常に実用的ではありません... – veljkoz

+1

複数のプロセスから同じファイルにログオンしようとしたようです(または複数の 'TraceListeners'を使用しているようです同じファイルに)。参照:http://stackoverflow.com/questions/1728571/logging-from-multiple-processes-to-same-file-using-enterprise-library-4-1。私はEnterprise Libraryをリリースして以来、エンタープライズ・プロダクション環境でエンタープライズ・ライブラリを使用してきました。 –

9

そして、ちょうど別の1:NLog。ローカルまたはリモートのデータベース - - データベースでのログは、.NETネットワークで

  • をサポート 店 - TCPを使用して 自動ファイル命名およびアーカイブ
  • イベントログを持つ単一のファイルまたは複数の、 -

    • ファイル、UDP、 SOAP、MSMQプロトコル
    • コマンドラインコンソール - メッセージ
    • Eメールのカラーコーディングを含む - あなたができますアプリケーションエラーが
    • ASP.NETトレース
    • を発生すると、より多くの
  • +0

    前回のプロジェクトでNLogを使用しましたが、Log4Netよりも構成が簡単であることがわかりました(不可能ではありません)。 – Shimrod

    11

    使用.NET common logging たび メールを受け取ります。後で特定のプロバイダ(NLog、CLog、log4net ...)を選択したり、カスタムプロバイダを作成することもできます。

    +4

    しかし、.NETの共通ログに依存しないようにしたいのですが?正直なところ、これは私にとって不必要な抽象層のように思えます。 log4netなどはそれ自体ロギングの抽象化であり、.NETの共通ログを使用しないという議論もされていない可能性があります。 –

    +7

    これはJava用のログを記録するapacheコモンズに似ていますが、同じ引数がその存在に適用されます。他のコードで使用されるライブラリを作成しているとしましょう。どのロギングフレームワークがライブラリと相互作用するコードで使われているかは、クライアントが特定のフレームワークの設定を持っていなければならないため、指示する必要はありません。もしあなたがlog4netを使うと決めたら、別のライブラリはNLogを使い、クライアントは両方のライブラリを使うためにそれらのconfigsを両方持っている必要があります。 Commonsでは、クライアントコードからログフレームワークを継承することができます。 – Ceilingfish

    0

    独自のロギングライブラリを作成することもできます。

    PostSharp http://www.sharpcrafters.com/を見ると、いくつかの基本的なロギングシステムの非常に良い例があります。

    1

    は別の総合的な答えは、この質問を参照してください:要するにWhen should I use Tracing vs Logger.NET, Enterprise Library, log4net or Ukadc.Diagnostics?

    、利用できるメインのロギングフレームワークが組み込まれているの.NET FrameworkたSystem.Diagnostics、log4netの、NLogおよびエンタープライズライブラリは、アプリケーションブロックのログ。

    サポートファイルをロール上に記載されているすべての主要なフレームワークが、私は、彼らはあなたにクリーンアップを残すと思うhttps://essentialdiagnostics.codeplex.com/wikipage?title=Comparison

    1)ログファイル管理:

    これらのメインフレームワークの比較はで入手できます。 。

    過去に私はrobocopyと "/ mov/minage X"を使って古いファイルを別の場所に移動してから削除するなど、スケジュールされたWindowsジョブを使用しました。

    System.Diagnosticsで使用されているEventSchemaTraceListener(blogged about recently)にはLimitedCircularFilesオプションがありますが、ログを表示するツールはあまりありません(XML形式です)。メッセージの特定の種類に電子メールを送信する

    2)能力は、例えば、(エラーをログに記録した)

    この直接または拡張(追加のリスナー)を介して支持体上に記載されたすべてのメインフレームワーク。再び

    をログウィンドウイベントにメッセージを書き込むために

    3)能力、メインフレームワークのすべてがこれをサポートし、しかし、私は一般的に、Windowsのイベントログへの書き込みが直接実行する必要があることをお勧めしますと、トレースなしではありません。

    問題の1つは、ソースの自動作成の質問です。

    イベントログへの書き込み(EventLog.WriteEvent経由)は、最初のログメッセージが存在しない場合は自動的にソースの作成を試みます。問題はセキュリティであり、管理者のみが許可されます。ソースを作成するため、通常のユーザーとして実行すると失敗します。

    このため、実際にはEventLogInstallerを追加する必要があるため、インストール時にソースが作成されます(インストールは管理者が行います)。作成したプロセスは、ソースに書き込むことができます。

    これにより、イベントログのソースが同じであることを保証するために、イベントログを作成してコードに書き込む必要があることが私の推奨につながります。また、イベントログに書き込むのが一般的であれば、誤った設定によって 'オフにする'ことはできないようにする必要があります。

    私が個人的に推奨するのは、.NET Framework System.Diagnosticsです。特に、Service Trace Viewerは、特に多層、マルチスレッド環境での問題の診断に優れています相関はティア間で識別されます。

    関連する問題