C# Log4NET AdoNetAppender连接字符串引用

C# Log4NET AdoNetAppender连接字符串引用,c#,.net,web-config,log4net,C#,.net,Web Config,Log4net,我想使用Log4NET登录到我的数据库,在一些教程之后,我看到我必须为DAO appender配置一个连接字符串 我的web.config中已经有一个DB连接的连接字符串,所以我想知道我是否可以引用它而不是设置一个新的连接字符串 我通常会更改连接字符串以从dev DB切换到production DB,因此共享相同的连接参数可能非常有用。编辑:由于这是发布的,log4net现在支持在配置中指定连接字符串的名称。从- 这将向AdoNetAppender类添加一个新的“connectionString

我想使用Log4NET登录到我的数据库,在一些教程之后,我看到我必须为DAO appender配置一个连接字符串

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


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

编辑:由于这是发布的,log4net现在支持在配置中指定连接字符串的名称。从-

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

这里有一个例子

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

在配置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();
   }
}
公共静态类日志配置器
{
公共静态void SetConnectionString(string connectionString)
{
层次结构logHierarchy=log4net.LogManager.GetRepository()作为层次结构;
if(logHierarchy==null)
{
抛出新的InvalidOperationException
(“无法设置连接字符串,因为层次结构为空。”);
}
var appender=logHierarchy.GetAppenders()
第()类
.SingleOrDefault();
if(appender==null)
{
抛出新的InvalidOperationException
(“找不到数据库附加器”);
}
appender.ConnectionString=连接字符串;
appender.ActivateOptions();
}
}