【发布时间】:2010-09-14 06:16:23
【问题描述】:
我需要根据我在 Visual Studio 中使用的配置更改应用名称。例如,如果我在调试配置中,我希望应用程序名称在 Elmah_Error 表的应用程序字段中显示为“App_Debug”。有人对这个有经验么?或者有其他方法吗?
【问题讨论】:
我需要根据我在 Visual Studio 中使用的配置更改应用名称。例如,如果我在调试配置中,我希望应用程序名称在 Elmah_Error 表的应用程序字段中显示为“App_Debug”。有人对这个有经验么?或者有其他方法吗?
【问题讨论】:
这现在可以完全在标记中完成。只需将applicationName 属性添加到web.config 文件的<elmah> 部分中的errorLog 元素。示例:
<errorLog type="Elmah.SqlErrorLog, Elmah"
connectionStringName="connectionString" applicationName="myApp" />
我已经对此进行了测试,它在记录异常和通过Elmah.axd 查看日志时都有效。
对于 OP,人们会想象它也可以通过编程方式设置,但我没有对此进行测试。对我来说,我想大多数情况下标记方法就足够了。
【讨论】:
<configSections> 中定义它。
DEBUG 构建需要不同的设置,则将其与 Web.Config 转换结合使用可能是可行的。 stackoverflow.com/a/35561167/397817msdn.microsoft.com/en-us/library/dd465326(VS.100).aspx
默认情况下,Elmah 使用 AppPool 的应用程序 GUID 作为默认应用程序名称。当您查看通过其 HTTP 模块创建的 Web 界面时,它使用它作为识别 Elmah_Error 表中错误的关键。
今年早些时候,我的任务是为我的公司探索这个选项。由于 Elmah 从 ErrorLog.cs 文件中的 HttpRuntime.AppDomainAppId 中提取应用程序名称,因此我无法找到默认操作的方法。你可以用任何你想要的键来操作它;但是,那是 AppPool 的 GUID。
话虽如此,我能够操纵 ErrorLog.cs 文件将 Elmah 转变为可调用框架,而不是基于处理程序的框架,并允许我设置 ApplicationName。我最终做的是修改 ErrorLog.cs 以包含一个允许我设置名称的属性,如下所示:
public virtual string ApplicationName
{
get
{
if (_applicationName == null) { _applicationName = HttpRuntime.AppDomainAppId; }
return _applicationName;
}
set { _applicationName = value; }
}
您可能需要做的是以不同的方式进行调整,并将 ApplicationName 设置为不是HttpRuntime.AppDomainAppId,而是从 web.config 中提取的值。总而言之,这是可能的。我这样做的方式增强了ErrorLog.Log(ex) 方法,因此我可以使用 Elmah 具有超越 Web 应用程序的可调用框架。回想起来,我希望我改为使用 app/web.config 方法。
在 Elmah 中更改应用程序名称时要记住一件事。生成 /elmah/default.aspx 接口的 http 处理程序将不再工作。我仍在努力寻找时间绕回这样的地方;但是,您可能需要在实现时考虑创建自定义接口。
【讨论】: