4

私はlog4netを使用するクラスMyLoggerを持っています。ログを特定のログ名に保存するようにアペンダーを変更するにはどうすればよいですか (パラメーター logName で設定したい)。

public void AddEntry(string source, string logName, string contextInfo, string message, EventLogEntryType eventType)
        {

             log4net.ILog Log = log4net.LogManager.GetLogger(source);

             Log.Error(String.Format("Context Info: {0}{1}{2}{3}", contextInfo, Environment.NewLine, Environment.NewLine, message));

        }

<log4net>
  <root>
    <priority value="ALL" />
     <appender-ref ref="EventLogAppender" />
  </root>

これがマイアペンダーです。これで、共通のログタイプ Application に書き込みます。

  <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >

    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%logger (%property{myContext}) [%level]- %message%newline" />
    </layout>
  </appender>
</log4net>
4

2 に答える 2

2

これは機能します:

<param name="LogName" type="log4net.Util.PatternString" value="%property{LogName}" />
于 2010-08-25T14:02:33.573 に答える
2

あなたが探しているのはこれだと思います:

<param name="LogName" value="MyLog" />

詳細については、こちらを参照してください。このようなことをする場合は、この問題も見てみたいと思うかもしれません。基本的に、これはアプリケーションを登録して、イベントログがそれを認識できるようにすることです。

編集(コードによる構成):

それをテストしませんでしたが、それはうまくいくはずです:

foreach (AppenderSkeleton appender in this.Logger.Repository.GetAppenders())
{
    var eventlogAppender = appender as EventLogAppender;
    if (eventlogAppender != null)
    {
        eventlogAppender.LogName = "MyLog";
        eventlogAppender.ActivateOptions();
        break;
    }
 }

EventLogAppender が 1 つだけであることを確認するためにいくつかのテストを追加できますが、おそらくそうする必要はありません。

于 2010-08-20T19:34:45.233 に答える