【问题标题】:How to grab a logged entry out of ELMAH manually如何手动从 ELMAH 中获取已记录的条目
【发布时间】:2011-08-29 05:20:45
【问题描述】:

这看起来很简单。 Elmah 记录错误,我在 elmah.axd 文件中看到错误,然后我想将数据抓取到新的自定义视图中。

我不知道如何从 Elma 中获取详细信息页面。到目前为止,我所能做的就是获得我想要的 ErrorLogEntry,但无法弄清楚如何获得服务器吐出的实际 XML/Exception 错误。

Elmah 设置正常。但我有:

<customErrors mode="On" defaultRedirect="~/Error/Index">
    <error statusCode="404" redirect="~/Error/NotFound"></error>
</customErrors>

这属于我的简单 ErrorController.cs 类:

public virtual ActionResult Index( )
{
    Exception ex = null;

    try
    {
        Elmah.ErrorLogDataSourceAdapter eldsa = new Elmah.ErrorLogDataSourceAdapter( );
        ErrorLogEntry[] errors = eldsa.GetErrors( 0, 1 );

        foreach ( ErrorLogEntry ele in errors )
        {
            ViewData[ "Description" ] += ele.Error.Message + "<br />";
            ViewData[ "Description" ] += ele.Error.WebHostHtmlMessage + "<br />";
            Elmah.ErrorLogPageFactory pf = new ErrorLogPageFactory( );

        }
    }
    catch
    {
        ViewData[ "Description" ] = "An error occurred.";
    }

    ViewData[ "Title" ] = "Oops. We're sorry. An error occurred and we're on the case.";

    //Email.SendException( ex, "Error in PRISM.NET" );
    return View( );
}

出现的问题是 WebHostHtmlMessage 为空。所以我无法收到异常消息。

我整天都在研究 Elmah 代码,但我不知道如何手动创建一个页面,就像 Elmah 在调用 elmah.axd 时所做的那样。

【问题讨论】:

    标签: asp.net-mvc-2 logging elmah


    【解决方案1】:

    假设您将数据存储在默认表 ELMAH_Error 中

    SELECT AllXml
    FROM ELMAH_Error
    

    【讨论】:

    • 我想从 Elmah 类中获取数据,而不是用老式的方式。
    【解决方案2】:

    解决方案如下:

    public virtual ActionResult Index( )
    {
        Exception ex = null;
    
        try
        {
            Elmah.ErrorLogDataSourceAdapter eldsa = new Elmah.ErrorLogDataSourceAdapter( );
            ErrorLogEntry[] errors = eldsa.GetErrors( 0, 1 );
    
            foreach ( ErrorLogEntry ele in errors )
            {
                ErrorLogEntry thisError = ErrorLog.GetError(ele.Id);
                ex = new Exception( thisError.Error.WebHostHtmlMessage );
            }
        }
        catch
        {
            ViewData[ "Description" ] = "An error occurred.";
        }
    
        ViewData[ "Description" ] = "Oops. We're sorry. An error occurred and we're on the case.";
    
        Email.SendException( ex, "Error in PRISM.NET" );
        return View( );
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-24
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      相关资源
      最近更新 更多