Log4NET AdoNetAppender连接字符串引用

时间:2012-11-22 09:55:54

标签: c# .net web-config log4net

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

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

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

1 个答案:

答案 0 :(得分:6)

编辑:自发布以来,log4net现在支持在配置中指定连接字符串名称。来自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();
   }
}