8

log4net API を介してlog4netログ ファイルの名前パターンを実行時に取得する C# コードを作成しようとしています。

つまり、log4net.configで次のアペンダーが定義されている場合:

<appender name="MyAppender" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="%date{yyyy}\%date{MM}\%date{dd}\%property{Id}.log" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="16" />
  <maximumFileSize value="1MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%message%newline" />
  </layout>
</appender>

コード内の文字列変数で%date{yyyy}\%date{MM}\%date{dd}\%property{Id}.logを取得したいと思います ( log4net.configをプレーン XML として解析せずに)。

このトリックを引っ張るアイデアを持っている人はいますか?

前もって感謝します。

4

4 に答える 4

2

このパターンの値は、ログ リポジトリの一部でFileあるインスタンスのプロパティになります。FileAppender

アペンダーへのアクセスは、いくつかの異なる方法で行うことができます。

  1. すでにILoggerインスタンス ( から取得したものなどLogManager.GetLogger()) がある場合は、Appendersその上にプロパティがあります。これにより、ロギング階層の特定のレベルに関連付けられたすべてのアペンダーが提供されます。
  2. を呼び出して、ロガーとアペンダーの階層全体を含むオブジェクトLogManager.GetRepository()を取得することもできます。Heirarchyこのメソッドはアセンブリを想定しているため、渡しGetCallingAssembly()てデフォルトのアセンブリを取得します。このクラスには、GetAppenders()構成されたすべてのアペンダーを返すメソッドがありますが、どのアペンダーがどのロガーに関連付けられているかはわかりません。

FileAppenderそこから、正しいタイプ (または など)のアペンダーを探して、そのプロパティRollingFileAppenderを読み取りFileます。

于 2012-09-08T22:40:31.000 に答える
0

基本クラスの代わりに、RollingFileAppender をサブクラス化し、構成ファイルでサブクラスを使用したいと思います。クラス名の前に完全な名前空間を付けて、log4net が見つけられるようにしてください。

コードでサブクラス化された UDPAppender のみがあります。次のようなオーバーライドを追加しました。

    public override void ActivateOptions()
    {
        base.ActivateOptions();
    }

基本クラスの呼び出しの前に中断したとき、ローカル ウィンドウで「this」を調べ、UDPAppender の「メンバー」の値を確認しました。

于 2012-09-10T18:53:54.167 に答える