我需要根据我在 Visual Studio 中使用的配置更改应用名称。例如,如果我在调试配置中,我希望应用程序名称在 Elmah_Error 表的应用程序字段中显示为“App_Debug”。有人对这个有经验么?还是有其他方法可以做到这一点?
2 回答
这现在可以纯粹在标记中完成。只需在 web.config 文件部分的元素中添加一个applicationName
属性。例子:errorLog
<elmah>
<errorLog type="Elmah.SqlErrorLog, Elmah"
connectionStringName="connectionString" applicationName="myApp" />
我已经对此进行了测试,它在记录异常和通过Elmah.axd
.
在 OP 的情况下,人们会想象它也可以通过编程方式设置,但我没有对此进行测试。对我来说,我想在大多数情况下,标记方法就足够了。
默认情况下,Elmah 使用 AppPool 的应用程序 GUID 作为默认应用程序名称。当您查看通过其 HTTP 模块创建的 Web 界面时,它使用它作为识别 Elmah_Error 表中错误的关键。
今年早些时候,我的任务是为我的公司探索这个选项。HttpRuntime.AppDomainAppId
由于 Elmah 从ErrorLog.cs 文件中提取应用程序名称,因此我无法找到一种默认操作的方法。你可以用任何你想要的键来操作它;但是,那是 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 处理程序将不再工作。我仍在努力寻找时间绕回这样的地方;但是,您可能需要在实现时考虑创建自定义接口。