53

log4net 構成データを application.config ファイルに保存したいと考えています。ドキュメントの理解に基づいて、次のことを行いました。

  1. log4net.dll への参照を追加します

  2. AssemblyInfo.cs に次の行を追加します。

    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    
  3. 次のようにロガーを初期化します。

    private static readonly ILog log = LogManager.GetLogger(typeof(frmWizard));
    
  4. app.config に次のコードがあります。

    <configSections>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <log4net>
      <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
      </appender>
      <root>
        <level value="INFO" />
        <appender-ref ref="ConsoleAppender" />
      </root>
    </log4net>

ただし、アプリケーションを実行すると、コンソールに次のエラーが表示されます。

[Consoleappender] という名前のアペンダーが見つかりませんでした。

構成ファイルから設定を読み取るように log4net を取得するにはどうすればよいですか?

ありがとう!

4

5 に答える 5

39

configSections 要素の app.config に行を追加します

<configSections>
 <section name="log4net" 
   type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, 
         Culture=neutral, PublicKeyToken=1b44e1d426115821" />
</configSections>

その後、後で log4Net セクションを追加しますが、他の場所で実際の log4Net 構成ファイルに委任します...

<log4net configSource="Config\Log4Net.config" />

アプリケーション コードで、ログを作成するときに次のように記述します。

private static ILog GetLog(string logName)
{
    ILog log = LogManager.GetLogger(logName);
    return log;
}
于 2008-12-16T21:13:04.843 に答える
37

質問に示されている構成から、構成されたアペンダーは1つだけで、「EventLogAppender」という名前が付けられています。ただし、ルートの構成では、作成者は「ConsoleAppender」という名前のアペンダーを参照しているため、エラー メッセージが表示されます。

于 2012-10-20T14:13:19.863 に答える
4

@Charles Bretanaの回答を完全にサポートします。ただし、うまくいかない場合は、ルート要素の最初の子である要素が1 つしかない<section>ことを確認してください。 configSections

configsectionsapp.Configafter 構成の最初の要素である必要があります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net"  type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
  </configSections>
  <!-- add log 4 net config !-->
  <!-- add others e.g. <startup> !-->
</configuration>
于 2015-01-20T14:46:25.163 に答える
3

configsectionapp.config にハンドラーを追加しようとしましたか? 例えば

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
于 2008-12-16T21:09:32.807 に答える
2

すべてのアペンダー名は、ルート セクションに反映される必要があります。
あなたの場合、アペンダー名はEventLogAppenderですが、<root> <appender-ref ..セクションではConsoleAppenderという名前になっています。それらは一致する必要があります。

ログ構成に複数のアペンダーを追加できますが、それぞれを<root>セクションに登録する必要があります。

<appender-ref ref="ConsoleAppender" />
<appender-ref ref="EventLogAppender" />

log4net の構成については、Apache のドキュメントを参照することもできます。

于 2014-12-30T17:36:57.827 に答える