【问题标题】:Capturing Elmah Generated Application Error Information for Body of Email为电子邮件正文捕获 Elmah 生成的应用程序错误信息
【发布时间】:2016-02-11 20:08:55
【问题描述】:

我公司网络场中的电子邮件服务器不允许从网络应用程序发送电子邮件。

当我的应用程序发送电子邮件时,我会通过运行在 SQL 服务器上的存储过程来发送电子邮件。因此,我无法使用 Elmah 的电子邮件生成功能来通知网站管理员我的 Web 应用程序中发生的错误。

我创建了一个ErrorMessage_Elmah.aspx 页面,它将通知应用程序用户发生了错误。

在该 aspx 页面的 Page_Load 事件中,我执行电子邮件存储过程,将收件人、主题和正文信息传递给它。

据我了解,Elmah 捕获的与错误相关的信息包含在 Elmah.axd 文件中。我想捕获该信息并将其放入我的电子邮件正文中。如何以编程方式访问 Elmah.axd 以获取错误信息以插入我的电子邮件正文?

【问题讨论】:

  • Elmah 存储有关错误的信息,无论您配置了什么后端存储。它不会将其存储在 AXD 中。那么你是如何配置后端存储的呢?在内存、XML、SQL Server 或其他一些存储提供程序中?

标签: asp.net vb.net elmah


【解决方案1】:

我也想从我的网络应用程序发送电子邮件,并且在 elmah 中似乎没有允许发送 SQL 存储过程的配置(也不能使用 smtp)。我很擅长通过给定的存储过程对 elmah 表进行日志记录。

这让我假设答案是更改 elmah 安装附带的存储过程,并在其中提供我自己的电子邮件例程。我已经测试了以下 XML 将如何出现在 HTML 电子邮件中。它是一个冠军!

ALTER PROCEDURE [dbo].[ELMAH_LogError]
(
    @ErrorId UNIQUEIDENTIFIER,
    @Application NVARCHAR(60),
    @Host NVARCHAR(30),
    @Type NVARCHAR(100),
    @Source NVARCHAR(60),
    @Message NVARCHAR(500),
    @User NVARCHAR(50),
    @AllXml NTEXT,
    @StatusCode INT,
    @TimeUtc DATETIME
)
AS

    SET NOCOUNT ON

    INSERT
    INTO
        [ELMAH_Error]
        (
            [ErrorId],
            [Application],
            [Host],
            [Type],
            [Source],
            [Message],
            [User],
            [AllXml],
            [StatusCode],
            [TimeUtc]
        )
    VALUES
        (
            @ErrorId,
            @Application,
            @Host,
            @Type,
            @Source,
            @Message,
            @User,
            @AllXml,
            @StatusCode,
            @TimeUtc
        );
    DECLARE @TmpSubject VARCHAR(80);
    SET @TmpSubject = 'ELMAH ERROR LOG ('+@Application+')';

    -- here is the good stuff:
    DECLARE @TmpDetail NVARCHAR(MAX);
    DECLARE @TmpMessage NVARCHAR(MAX);
    DECLARE @xml as xml;

    set @xml = (SELECT @AllXML);

    select @TmpDetail = (select x.i.value('@webHostHtmlMessage', 'nvarchar(max)') --as HTML
    from @xml.nodes('/error') as x(i));

    SELECT @TmpMessage = '<p style="color:#000; font-size:12pt; font face:arial">USER '+@User+' encountered the following error at UTC: '+cast(@TimeUtc as varchar(22))+'</p>'+char(10)+@TmpDetail;

    -- now we can send the HTML in the body of an HTML formatted SMTP email routine:
    exec dbo.spSendHTML @To='support@mycompany.com', @SUBJECT=@TmpSubject, @MESSAGE=@TmpMessage;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    相关资源
    最近更新 更多