C# log4net SQL配置,而不是web.config
需要在我的项目中使用sql配置log4net,但由于安全原因,必须在web.config上没有连接字符串详细信息。有哪些替代方案?只需隐藏ConnectionString即可C# log4net SQL配置,而不是web.config,c#,asp.net,log4net,C#,Asp.net,Log4net,需要在我的项目中使用sql配置log4net,但由于安全原因,必须在web.config上没有连接字符串详细信息。有哪些替代方案?只需隐藏ConnectionString即可 { var settings = ConfigurationManager.ConnectionStrings[1]; var fi = typeof(ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | Bind
{
var settings = ConfigurationManager.ConnectionStrings[1];
var fi = typeof(ConfigurationElement).GetField("_bReadOnly",
BindingFlags.Instance | BindingFlags.NonPublic);
fi.SetValue(settings, false);
string connection = GetConnection();//To get the connection
details using a service
settings.ConnectionString = connection;
}
这并没有解决我的问题,而是隐藏了连接字符串
细节。要传递给web.config以使用log.net sql日志的连接详细信息可以将连接字符串存储在一个单独的文件中,您可以将其保存在源代码管理之外,以避免暴露凭据。将以下内容添加到Web.config文件:
<configuration>
<connectionStrings configSource="connections.secret.config" />
</configuration>
然后创建connections.secret.config文件,但请将其远离您的解决方案:
<connectionStrings>
<add name="connection_name" connectionString="your_connection" providerName="System.Data.SqlClient" />
</connectionStrings>
您需要确保在使用环境变量或类似变量部署代码的任何地方提供连接字符串。最后,帮助我将连接信息传递给ado.net appender的连接字符串
Finally, the one which helped me to pass the connection information to ado.net appender
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; // Using a service to get
//the connection information
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=ConnectionString;//使用服务获取
//连接信息
appender.ActivateOptions();
}
}
web.config,为ado.net appender提供相同的名称以获取连接
感谢您提供的解决方案,但我们仍在尝试从任何配置文件中隐藏信息。而且该文件不适用于解决方案“构建”将出现问题。在这种情况下,我建议加密Web.config。谢谢Benjrb,这将是一个选项。同时,我找到了使用服务获取连接的另一种方法,并将其传递给Ado.net Appender
web.config , give the same name for ado.net appender to take the connection
<connectionStringName value="ConnectionString" />
<connectionStrings>
<add name="ConnectionString" connectionString=""
providerName="System.Data.SqlClient" />
</connectionStrings>