【问题标题】:Log4NET AdoNetAppender connection string referenceLog4NET AdoNetAppender 连接字符串参考
【发布时间】:2012-11-22 09:55:53
【问题描述】:

我想使用 Log4NET 登录我的数据库并按照一些教程我看到我必须为 DAO 附加程序配置一个连接字符串。

我的 web.config 中已经有一个用于 DB 连接的连接字符串,所以我想知道是否可以引用它而不是设置一个新的。

我通常更改我的连接字符串以从开发数据库切换到生产数据库,因此共享相同的连接参数可能非常有用。

【问题讨论】:

    标签: c# .net web-config log4net


    【解决方案1】:

    编辑:自发布以来,log4net 现在支持在配置中指定连接字符串 name。来自https://issues.apache.org/jira/browse/LOG4NET-88 -

    这会向 AdoNetAppender 类添加一个新的“connectionStringName”属性(以及相应的 ConnectionStringName)属性。这是对 App.config 或 Web.config 文件的 <ConnectionStrings> 部分中的连接字符串的引用。

    this answer中有一个例子。

    如果您没有在<ConnectionStrings> 部分中定义连接字符串,那么您可以使用此类在运行时设置连接字符串:

    您在配置 log4net 之后使用连接字符串调用 SetConnectionString

    不过,有几点我要注意:

    Log4net 数据库附加程序不喜欢在没有连接字符串的情况下创建,并且会引发(内部)错误 - 在单元测试期间,我发现在给定假连接字符串时测试需要超过 10 秒。

    public static class LogConfigurator
    {
       public static void SetConnectionString(string connectionString)
       {
            Hierarchy logHierarchy = log4net.LogManager.GetRepository() as Hierarchy;
    
            if (logHierarchy == null)
            {
                throw new InvalidOperationException
                   ("Can't set connection string as hierarchy is null.");
            }
    
            var appender = logHierarchy.GetAppenders()
                                       .OfType<AdoNetAppender>()
                                       .SingleOrDefault();
    
            if (appender == null)
            {
                throw new InvalidOperationException
                  ("Can't locate a database appender");
            }
    
            appender.ConnectionString = connectionString;
            appender.ActivateOptions();
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-12
      • 2016-09-27
      • 2017-02-19
      • 1970-01-01
      • 2012-02-23
      • 2012-11-23
      • 2015-04-03
      • 2013-08-09
      • 1970-01-01
      相关资源
      最近更新 更多