【问题标题】:log4net Configure() tries to establish SQL connection before connString is setlog4net Configure() 尝试在设置 connString 之前建立 SQL 连接
【发布时间】:2017-05-08 21:05:31
【问题描述】:

我正在为 AdoNetAppender 动态配置连接字符串。

我遇到的问题是,log4net.Config.XmlConfigurator.Configure(); 正在尝试建立与数据库的连接,但连接字符串直到下一行 (ConfigureLog4Net(logConnString);) 才被设置

Global.asax.cs

protected void Application_Start()
{
    // Other configuration

    // Configure logging
    var logConnString = ConfigurationManager.ConnectionStrings["LoggingConnection"].ToString();

    if (logConnString != null)
    {
        log4net.Config.XmlConfigurator.Configure();
        ConfigureLog4Net(logConnString);
    }
}

private void ConfigureLog4Net(string logConnString)
{
    Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
    if (hierarchy != null && hierarchy.Configured)
    {
        foreach (IAppender appender in hierarchy.GetAppenders())
        {
            if (appender is AdoNetAppender)
            {
                var adoNetAppender = (AdoNetAppender)appender;
                adoNetAppender.ConnectionString = logConnString;
                adoNetAppender.ActivateOptions(); //Refresh AdoNetAppenders Settings
            }
        }
    }
}

【问题讨论】:

  • 嗯,是的——XmlConfigurator.Configure 配置一切,包括任何活动的附加程序。你想要你的蛋糕并且也吃掉它。您可以显式读取 XML 并在将其传递给 XmlHierarchyConfigurator 之前对其进行操作,或者您可以为 AdoNetAppender 创建一个包装类,以延迟连接字符串的初始化/验证,或者跳出 @9​​87654329@,或者显式配置appender 在代码中打开之前是OFF(不确定这是否有效),甚至代理ADO 提供程序。不过,这些都不是很好。
  • This 可能会有所帮助
  • @JeroenMostert 你有 AdoNetAppender 包装器的例子吗?
  • 不,我只是在抛砖引玉。不过,它可能就像继承它并覆盖 ActivateOptions 一样简单(例如,检查连接字符串是否为空,如果是则立即返回,否则调用 base.ActivateOptions())。
  • 作为另一种选择,您的连接字符串似乎存储在ConnectionStrings 部分中,您可以定义您希望log4net 使用的ConnectionStringName

标签: c# asp.net-web-api log4net


【解决方案1】:

您可以将 log4net 配置为从 ConnectionStrings 获取值,而不是将连接字符串本身添加到 log4net 配置中。而不是 connectionString 添加:

<connectionStringName value="LoggingConnection" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 2017-12-23
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多