asp.net - Elmah - ASP.NET -> 多个连接字符串 -> 在代码中设置 SQL 错误日志连接字符串

标签 asp.net connection-string elmah

我正在寻求集成 ELMAH到现有的 ASP.NET 应用程序中以进一步支持错误调查,并可以使用一些有关连接字符串的帮助。我们对应用程序部署的所有环境或我们的环境使用单个 web.config 文件,并且在运行时,应用程序通常根据 URL 决定它所处的环境。

这就是标准 block 对我们来说所希望的......

  <connectionStrings>
    <add name="TESTAppDB" connectionString="Data Source=SQL-T-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
    <add name="CERTAppDB" connectionString="Data Source=SQL-C-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
    <add name="PRODAppDB" connectionString="Data Source=SQL-P-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
  </connectionStrings>

使用 Elmah,您似乎只需要指定连接字符串的名称,但如何在运行时动态地执行此操作?例如,如果我正在测试,那么我想要这个:

<elmah>
     <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="TESTAppDB"/>
</elmah>

但如果我处于 PROD 状态:

<elmah>
     <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="PRODAppDB"/>
</elmah>

编辑
Web 应用程序的部署实践远远超出了我想要做的范围。我需要一个代码解决方案,允许我更改 ELMAH Sql 错误日志的数据源...

我无法改变我们今天部署网络应用程序的方式。这意味着,TEST 中的任何内容都会转移到 CERT。 CERT 中的内容移至 PROD。 Web 应用程序必须能够确定它所处的环境并按此运行...

最佳答案

由于 Elmah 是开源的,因此很容易添加您自己的:-)

您需要做的就是向 SqlErrorLog 类添加一个新的静态属性,该属性将包含您要使用的连接字符串,然后更新 SqlErrorLog.ConnectionString 属性返回您的自定义连接字符串(如果它有值)。

尝试将类似的内容添加到类中(警告 - 未经测试的代码):

public static string CustomConnectionString { get; set; }

public virtual string ConnectionString
{
  get 
  { 
    if (string.IsNullOrEmpty(CustomConnectionString)) 
    {
      return _connectionString;
    }
    else
    {
      return CustomConnectionString; 
    }
  }
}

这应该足够了。现在您所要做的就是找到选择连接字符串的位置并将其更新以同时设置 SqlErrorLog.CustomConnectionString 属性。

关于asp.net - Elmah - ASP.NET -> 多个连接字符串 -> 在代码中设置 SQL 错误日志连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/878987/

相关文章:

c# - ASP MVC : E-mail Verification (Encrypting the activation link)

c# - 在 ADO 中使用 Entity Framework 连接字符串

asp.net-mvc-5 - 每个客户端一个数据库的 EF6(相同的上下文)

c# - 主题页面错误中的 ELMAH

c# - 网。辐射网格。在回发时丢失更改的值

c# - 使用 DataGrid ItemDataBound 事件检查值

c# - 类调试,如何知道从哪里调用类

powershell - 为什么 connectionUri 在用于 exchange 和 windows 的 WSManConnectionInfo 对象中不同?

nhibernate - 为什么 nhibernate 需要 Log4Net?

asp.net-mvc - 你应该在哪里定期登录 asp.net-mvc ?你应该使用ELMAH吗?