gpt4 book ai didi

.net - 在控制台应用程序中使用 ELMAH

转载 作者:行者123 更新时间:2023-12-02 07:41:38 27 4
gpt4 key购买 nike

我刚刚开始使用 ELMAH 并且是它的粉丝。我的团队支持大量 Web 应用程序,令我特别兴奋的是 ELMAH 允许我们将每个应用程序的异常保存到同一个 MS SQL 数据库表中。

我们还支持一些控制台、DLL 和桌面应用程序。是否可以使用 ELMAH DLL 将这些应用程序中的异常记录到同一位置?

最佳答案

除了我们的 ASP.NET 站点之外,我们还需要能够从控制台应用程序和 Windows 服务进行登录。我使用了答案( ErrorLog.GetDefault(null); ),效果很好,直到我也需要发送电子邮件。

所以,这是我的解决方案。它处理日志、电子邮件、推文和过滤(在配置文件和代码中)。我还将主调用包装为 Exception 的扩展,因此可以像这样调用它: catch(Exception ex) { ex.LogToElmah(); }

要在代码中进行过滤,请 Hook 相应的 .Filtering 事件:ElmahExtension.ErrorLog.Filtering += new ExceptionFilterEventHandler(ErrorLog_Filtering);

代码:

using System;
using System.Web;
using Elmah;
namespace System
{
public static class ElmahExtension
{
public static void LogToElmah(this Exception ex)
{
if (HttpContext.Current != null)
{
ErrorSignal.FromCurrentContext().Raise(ex);
}
else
{
if (httpApplication == null) InitNoContext();
ErrorSignal.Get(httpApplication).Raise(ex);
}
}

private static HttpApplication httpApplication = null;
private static ErrorFilterConsole errorFilter = new ErrorFilterConsole();

public static ErrorMailModule ErrorEmail = new ErrorMailModule();
public static ErrorLogModule ErrorLog = new ErrorLogModule();
public static ErrorTweetModule ErrorTweet = new ErrorTweetModule();

private static void InitNoContext()
{
httpApplication = new HttpApplication();
errorFilter.Init(httpApplication);

(ErrorEmail as IHttpModule).Init(httpApplication);
errorFilter.HookFiltering(ErrorEmail);

(ErrorLog as IHttpModule).Init(httpApplication);
errorFilter.HookFiltering(ErrorLog);

(ErrorTweet as IHttpModule).Init(httpApplication);
errorFilter.HookFiltering(ErrorTweet);
}

private class ErrorFilterConsole : ErrorFilterModule
{
public void HookFiltering(IExceptionFiltering module)
{
module.Filtering += new ExceptionFilterEventHandler(base.OnErrorModuleFiltering);
}
}
}
}

此外,您还需要添加对 System.Web.dll 的引用在您的项目中才能使其发挥作用。

编辑:根据评论,仅当您的配置文件具有 <errorMail async="false"/> 时,此代码才会发送电子邮件。引用this code snippet你是否想保留 <errorMail async="true"/>在您的配置文件中(当 HttpContext.Current 可用时使用)。

关于.net - 在控制台应用程序中使用 ELMAH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/841451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com