gpt4 book ai didi

c# - 修改 Logger 的 adoAppender.ConnectionString

转载 作者:太空宇宙 更新时间:2023-11-03 21:39:42 24 4
gpt4 key购买 nike

我正在使用 log4net。问题是我仅在基于配置文件中的连接字符串启动应用程序后才创建连接字符串。这意味着配置文件还没有正确的连接字符串。我可以使用这段代码修改 appender 的连接字符串。

IAppender[] appenders = log.Logger.Repository.GetAppenders();
foreach(IAppender appender in appenders)
{
AdoNetAppender adoAppender = appender as AdoNetAppender;
if (adoAppender != null)
{
adoAppender.ConnectionString = new conn string;
}
}

但是,为了获取记录器(代码示例的第一行),记录器尝试使用默认连接字符串进行连接,因此会抛出异常。

有没有其他方法可以获取 appender 字符串,这样我就不必在修改字符串之前进行连接?

最佳答案

稍微弄乱之后(引用这个 question/answer 和这个 blog ),它看起来像 <connectionString>需要删除 app.config 中 AdoNetAppender 下的设置,并且 <connectionType>需要添加设置(如果还没有的话):

<connectionType value="System.Data.SqlClient.SqlConnection,
System.Data,
Version=4.0.0.0,
Culture=neutral,
PublicKeyToken=b77a5c561934e089" />

然后可以在代码中修改连接字符串:

log4net.Config.XmlConfigurator.Configure();
log4net.Repository.Hierarchy.Hierarchy hier = log4net.LogManager.GetRepository() as log4net.Repository.Hierarchy.Hierarchy;

if (hier != null)
{
var adoAppender = (AdoNetAppender)hier.GetAppenders()
.Where(appender => appender.Name.Equals("AdoNetAppender", StringComparison.InvariantCultureIgnoreCase))
.FirstOrDefault();

if (adoAppender != null)
{
adoAppender.ConnectionString = connstring;
adoAppender.ActivateOptions(); //refresh settings of appender
}
}

ILog log = LogManager.GetLogger("test");
log.Info("Test Message");

另一种选择,如果连接字符串在 <connectionString> 下的在 app.config 文件中,然后您可以将以下内容添加到您的附加程序中:

<connectionStringName value="ConnectionStringNameFromAppConfig" />

关于c# - 修改 Logger 的 adoAppender.ConnectionString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19962870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com