71

このスレッドでは、多くの人が log4net を使用していることを示しています。私は TraceSources のファンであり、log4net が使用される理由を知りたいです。

私がトレースソースを好む理由は次のとおりです。

  • プラグ可能なリスナー - XML、TextFile、Console、EventLog、独自のロール
  • カスタマイズ可能なトレース スイッチ (エラー、警告、情報、詳細、開始、終了、カスタム)
  • カスタマイズ可能な構成
  • Logging Application Block は、TraceListeners の大きなセットにすぎません
  • アクティビティ/スコープの相関 (たとえば、ASP.NET 要求内のすべてのログを特定の顧客に関連付ける)
  • Service Trace Viewer を使用すると、これらのアクティビティに対するイベントを個別に視覚化できます
  • すべて app.config/web.config で設定できます。

.NET フレームワークは内部で TraceSource を使用するため、一貫した方法でトレースを構成することもできます。log4net では、TraceSource だけでなく log4net も構成する必要があります。

log4net は、TraceSources が提供しない (または、いくつかのカスタム TraceListeners を作成することによって実行できなかった) ことを教えてくれますか?

4

5 に答える 5

9

log4net は、あなたがリストしたすべてのことを行っていると思います。

プラグイン可能なリスナーはアペンダーのように聞こえます-それらはたくさんあります.実際、ローリングログファイルをハッキングして、(ファイルの関連付けのために)常に .log で終わるようにし、電子メールアペンダーに cc フィールドを追加し、最終的に私のお気に入りの値を調整しました色付きのコンソール アペンダー。私がとても大胆かもしれません - 私の色付きのコンソールの幸福:

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<!-- Can Use:
        Blue
        Green
        Red
        White
        Yellow
        Purple
        Cyan
        HighIntensity
        -->
<mapping>
  <level value="FATAL" />
  <foreColor value="Yellow, HighIntensity" />
  <backColor value="Red" />
</mapping>
<mapping>
  <level value="ERROR" />
  <foreColor value="White" />
  <backColor value="Purple, HighIntensity" />
</mapping>
<mapping>
  <level value="WARN" />
  <backColor value="Blue" />
  <foreColor value="White" />
</mapping>
<mapping>
  <level value="INFO" />
  <backColor value="Green" />
  <foreColor value="White" />
</mapping>
<mapping>
  <level value="DEBUG" />
  <foreColor value="White" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
  <!--<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />-->
  <!--<conversionPattern value="%-5level %file:%line - %message%newline" />-->
  <conversionPattern value="%level %logger:%line %newline     %message%newline" />
</layout>

カスタマイズ可能なトレース スイッチ: Log4net には、詳細度の高い順に FATAL ERROR WARN INFO DEBUG のみが付属しています。私が実際に見逃しているのは、誰が何をしたかを記録するための AUDIT だけです。

カスタマイズ可能な構成: 実行時にロードする log4net.config ファイルを使用します (または、ログを c:\ に書き込み、構成が見つからないことを泣き言を言います)。

    Try
        ' Get log4net configuration from file
        Dim logConfigFile As FileInfo
        logConfigFile = New FileInfo(".\log4net.config")

        If logConfigFile.Exists Then
            XmlConfigurator.Configure(logConfigFile)
        Else
            CreateEmergenceLogFile(logConfigFile.FullName)
        End If

    Catch ex As Exception
        Console.Out.WriteLine("Could not load the log4net config file")
    End Try

TraceListeners の大きなセットです。スキップしてすみません。あなたの言葉を信じます。

アクティビティ/スコープの相関: すべてのファイル (読み取りクラス) が、個別のログ レベルのしきい値を持つことができる独自の名前付きログを取得するということですか。実際、単一のクラスでもロギングをセグメント化できます(実際には、あまりにも多くのことを行うようになっている可能性があります...)

クラスファイルで:

    Private Shared _logger As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

Private Shared _loggerAttribute As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Attribute")

Private Shared _loggerCache As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Cache")

サービス トレース ビューアー: log4net.config 内:

  <logger name="NipissingU.ADWrapper.EntryTools.Attribute">
    <level value="INFO" />
  </logger>
  <logger name="NipissingU.ADWrapper.EntryTools.Cache">
    <level value="WARN" />
  </logger>

それはすべて app.config/web.config で構成可能です。ASP.NET ではそれが良いことなのかもしれませんが、わかりませんが、リッチ クライアント Bean カウント アプリを作成するときは、別の構成ファイルが好きです。

ここにあるものはすべて、私自身のちょっとした使い方のトリックです。

hth、-マイク

于 2009-02-23T04:47:38.857 に答える
4

Log4Net の代わりに TraceSources を使用するもう 1 つの理由は、トレース自体です。もちろん、Log4Net には多くのリスナーが実装されていますが、これらすべてが必要ですか? ほとんどの場合、そうではありません。また、特別なリスナーが必要な場合、独自のリスナーを実装するのはそれほど難しくありませんよね? たとえば、データベースにトレースするリスナーが必要です (メッセージだけでなく、さまざまな情報 {文字列、int など} を同時に)。

私は正しいですか?

于 2010-04-28T09:07:07.383 に答える
3

ターゲティングの 1 つである Trace を使用するよりも Log4Net を好む理由 - Log4Net を使用すると、アプリケーションのさまざまなレイヤー (データ アクセス、サービス、ビジネス ロジックなど) とさまざまなサブシステム (認証、処理など) を個別に計測し、オン/オフにすることができます。各サブシステムのログを個別にオフにします。

この柔軟性により、システム全体のファイアホースをオンにすることなく、1 つのサブシステムの詳細なログを構成できます。

Trace クラスで提供される [TraceInformation() など] の静的メソッドは、ログがどのサブシステムからのものかを指定する方法を提供しないため、これは、独自の TraceListener を作成することによって簡単に提供されるものではありません。

もう 1 つの理由はパフォーマンスです。私のアプリケーションには、1 秒あたり数千のメッセージをログに記録する可能性がある部分があります。Log4Net は低いオーバーヘッドを課します。対照的に、最後に見たとき、ログ アプリケーション ブロックはログに記録されたすべてのメッセージに対して XML 構成を再解析したため、ブロックが非常に重く遅くなりました。

于 2009-02-23T04:03:16.187 に答える
0

私は log4net の仕組みにしか関与していませんが、そのフレームワークを使用する明らかなボーナスは、log4j の使用に慣れている人にとってはすぐに慣れることです。

もう 1 つの小さな利点は、log4net を使用したテスト ドライビング ロギングが非常に簡単であることです。ロガーは log4net.ILog を実装します。繰り返しますが、私はマイクロソフトのソリューションに精通していませんが、最初に System.Diagnostics.Trace クラスにファサードを記述せずにこれを行うにはどうすればよいか疑問に思っています。

トレース ソースのドキュメントをざっと見ても、レイアウトに相当するものは見つかりませんでした。そのようなものが存在するかどうか知りたいと思います。PatternLayout は、日付スタンプ、スレッド情報、ログ コンテキストなどの一般的なデータを使用してログ エントリをフォーマットするのに非常に便利です

さらに、ロギング フレームワークに拡張機能を記述することは、おそらく古典的な「メタ問題」であることを考えると、log4net はプラグイン可能なリスナーと同等のもののグランド リストをテーブルにもたらします。

アペンダーのリスト: http://logging.apache.org/log4net/release/config-examples.html

于 2009-05-30T12:45:00.800 に答える