我想使用 Log4NET 登录我的数据库并按照一些教程我看到我必须为 DAO 附加程序配置一个连接字符串。
我的 web.config 中已经有一个用于 DB 连接的连接字符串,所以我想知道是否可以引用它而不是设置一个新字符串。
我通常更改我的连接字符串以从开发数据库切换到生产数据库,因此共享相同的连接参数可能非常有用。
我想使用 Log4NET 登录我的数据库并按照一些教程我看到我必须为 DAO 附加程序配置一个连接字符串。
我的 web.config 中已经有一个用于 DB 连接的连接字符串,所以我想知道是否可以引用它而不是设置一个新字符串。
我通常更改我的连接字符串以从开发数据库切换到生产数据库,因此共享相同的连接参数可能非常有用。
编辑:自从发布后,log4net 现在支持在配置中指定连接字符串名称。来自https://issues.apache.org/jira/browse/LOG4NET-88 -
这会向 AdoNetAppender 类添加一个新的“connectionStringName”属性(以及相应的 ConnectionStringName)属性。
<ConnectionStrings>
这是对 App.config 或 Web.config 文件部分中的连接字符串的引用。
这个答案中有一个例子。
如果您没有在该<ConnectionStrings>
部分中定义连接字符串,那么您可以在运行时使用此类设置连接字符串:
SetConnectionString
在配置 log4net 之后,您使用连接字符串调用。
但是,有几点我要注意:
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();
}
}