Log4net構成データをapplication.configファイルに保存したいと思います。ドキュメントの理解に基づいて、次のことを行いました。
Log4net.dllへの参照を追加します
AssemblyInfo.csに次の行を追加します。
[Assembly: log4net.Config.XmlConfigurator(Watch = true)]
次のようにロガーを初期化します。
private static readonly ILog log = LogManager.GetLogger(typeof(frmWizard));
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を取得するにはどうすればよいですか?
ありがとう!
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;
}
質問に示されている構成から、構成されているアペンダーが1つだけあり、「EventLogAppender」という名前が付けられています。しかし、ルートの構成では、作成者は「ConsoleAppender」という名前のアペンダーを参照しているため、エラーメッセージが表示されます。
configsection
ハンドラーをapp.configに追加しようとしましたか?例えば.
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
@Charles Bretanaの答えを完全にサポートします。ただし、機能しない場合は、<section>
要素が1つだけ存在し、configSections
がルート要素の最初の子:
configsections
は、構成後のapp.Config
の最初の要素である必要があります。
<?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>
すべてのアペンダー名はルートセクションに反映する必要があります。
あなたの場合、アペンダー名はEventLogAppenderですが、<root> <appender-ref ..
セクションではConsoleAppender。彼らは一致する必要があります。
ログ設定に複数のアペンダーを追加できますが、それぞれを<root>
セクションに登録する必要があります。
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="EventLogAppender" />
Log4netの設定でApache documentation を参照することもできます。