実行時に定義する ConnectionString を使用したいと考えています。多くの例を見つけましたが、機能させることはできません。
カスタム AdoNetAppender を作成しました。
public class AdoNetMultiTenantAppender : AdoNetAppender
{
public new string ConnectionString
{
get
{
return base.ConnectionString;
}
set
{
base.ConnectionString = Tenant.Current.DataSource.ConnectionString; // Return the connection string
}
}
}
私は次の構成を持っています:
<appender name="AdoNetMultiTenantAppender" type="MyNameSpace.AdoNetMultiTenantAppender">
<bufferSize value="1" />
<connectionstring value="" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<commandText value="[...]" />
<parameter>
[...]
</parameter>
</appender>
私のロガーは、構成ファイルで次のように定義されています。
<logger name="ProcessLogger" additivity="false">
<level value="INFO"/>
<appender-ref ref="AdoNetMultiTenantAppender"/>
</logger>
そして最後に、私のコードでロガーを取得するには、次のことを行っています。
[...]
private static readonly ILog Logger = LogManager.GetLogger("ProcessLogger");
[...]
ProcessLogger.Logger.Info(message);
[...]
接続文字列を構成に「ハードコード」しようとすると、機能します。しかし、いくつかの変数に応じて別の ConnectionString が必要なため、これを行うことはできません。カスタムアペンダーに入れたプロパティ ConnectionString は決して呼び出されません。私が何かを見逃している場所はありますか?