我想使用我将在运行时定义的 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 永远不会被调用。知道我在哪里遗漏了什么吗?