3

log4netはこれらのファイルを監視でき、app/web.configファイルを変更せずにレベルを変更できるため、log4netの外部構成ファイルを好みます。NServiceBusでそれを行うのに少し苦労しています。私は使用しています ここに私の外部設定ファイルがあります

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingFile" type="log4net.Appender.FileAppender">
    <file value="C:\Logs\NServiceBusApplication.log" />

    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5p %d{hh:mm:ss} %message%newline" />
    </layout>
  </appender>

  <root>
    <level value="INFO" />
    <appender-ref ref="RollingFile" />
  </root>
</log4net>

これを行う最も簡単な方法は、AssemblyInfo.cs に属性を配置することです。

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "ApplicationName.log4net.xml", Watch = true)]

これは NServiceBus では機能しません (私は NServiceBus.Host.exe を使用しています)。それから電話してみた

SetLoggingLibrary.Log4Net(() => XmlConfigurator.Configure(log4netConfigUri));

Configure.WithEndpointConfig。これにより、log4net は正しい場所から構成ファイルを読み取り、それを監視しないため、ログ レベルを変更してもアプリに反映されません。

次にappSettingsで試しました

<appSettings>
    <add key="log4net.Config" value="ApplicationName.log4net.xml"/>
    <add key="log4net.Config.Watch" value="True"/>
</appSettings>

繰り返しますが、log4net はこれを読み取り、続いて ApplicationName.log4net.xml を読み取りますが、まだ監視していません。

NServiceBus.Host.exe を使用している NServiceBus サービスで log4net を構成するにはどうすればよいですか?

  1. 外部構成ファイルから構成ファイルを読み取ります (つまり、log4net 構成は app.config 内にありません)。
  2. 外部構成ファイルへの変更が反映されるように、外部構成ファイルを監視します。
4

2 に答える 2

6

assembly 属性を使用している場合は、次を使用します。

SetLoggingLibrary.Log4Net(); // no parameters

これも機能するはずです:

SetLoggingLibrary.Log4Net(() => XmlConfigurator.ConfigureAndWatch(log4netConfigFileInfo));

またはこれ:

XmlConfigurator.ConfigureAndWatch(log4netConfigFileInfo)
SetLoggingLibrary.Log4Net();
于 2013-03-27T06:33:25.973 に答える