【问题标题】:Is there any way to programmatically set the application name in Elmah?有没有办法以编程方式在 Elmah 中设置应用程序名称?
【发布时间】:2010-09-14 06:16:23
【问题描述】:

我需要根据我在 Visual Studio 中使用的配置更改应用名称。例如,如果我在调试配置中,我希望应用程序名称在 Elmah_Error 表的应用程序字段中显示为“App_Debug”。有人对这个有经验么?或者有其他方法吗?

【问题讨论】:

    标签: c# asp.net elmah


    【解决方案1】:

    这现在可以完全在标记中完成。只需将applicationName 属性添加到web.config 文件的<elmah> 部分中的errorLog 元素。示例:

    <errorLog type="Elmah.SqlErrorLog, Elmah" 
        connectionStringName="connectionString" applicationName="myApp"  />
    

    我已经对此进行了测试,它在记录异常和通过Elmah.axd 查看日志时都有效。

    对于 OP,人们会想象它也可以通过编程方式设置,但我没有对此进行测试。对我来说,我想大多数情况下标记方法就足够了。

    【讨论】:

    【解决方案2】:

    默认情况下,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 处理程序将不再工作。我仍在努力寻找时间绕回这样的地方;但是,您可能需要在实现时考虑创建自定义接口。

    【讨论】:

    • 小问题,但我更喜欢这种模式:return _applicationName ?? (_applicationName = HttpRuntime.AppDomainAppId);
    • 在 Elmah 的数据库中的存储过程中有应用程序名称的过滤器。我已更改环境中的所有存储过程以忽略此过滤器,以便我可以在单个控制台中查看所有错误。
    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    相关资源
    最近更新 更多