Advertisement
jkealey

Elmah logging/emails without HttpContext

May 28th, 2013
1,943
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.99 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Web;
  6. using Elmah;
  7.  
  8. namespace Data.Shared.Utils
  9. {
  10.     public class SyncErrorMailModule : ErrorMailModule
  11.     {
  12.         protected override void ReportErrorAsync(Error error)
  13.         {
  14.             ReportError(error); // force synchronous - otherwise emails are not sent.
  15.         }
  16.     }
  17.  
  18.     public static class ElmahExtension
  19.     {
  20.         public static void LogToElmah(this Exception ex)
  21.         {
  22.             if (HttpContext.Current != null)
  23.             {
  24.                 ErrorSignal.FromCurrentContext().Raise(ex);
  25.             }
  26.             else
  27.             {
  28.                 if (httpApplication == null) InitNoContext();
  29.  
  30.                 ErrorSignal.Get(httpApplication).Raise(ex);
  31.             }
  32.         }
  33.  
  34.         private static HttpApplication httpApplication = null;
  35.         private static ErrorFilterConsole errorFilter = new ErrorFilterConsole();
  36.  
  37.         private static SyncErrorMailModule ErrorEmail = new SyncErrorMailModule();
  38.         private static ErrorLogModule ErrorLog = new ErrorLogModule();
  39.         private static ErrorTweetModule ErrorTweet = new ErrorTweetModule();
  40.  
  41.         private static void InitNoContext()
  42.         {
  43.             httpApplication = new HttpApplication();
  44.             errorFilter.Init(httpApplication);
  45.  
  46.             (ErrorEmail as IHttpModule).Init(httpApplication);
  47.             errorFilter.HookFiltering(ErrorEmail);
  48.  
  49.             (ErrorLog as IHttpModule).Init(httpApplication);
  50.             errorFilter.HookFiltering(ErrorLog);
  51.  
  52.             (ErrorTweet as IHttpModule).Init(httpApplication);
  53.             errorFilter.HookFiltering(ErrorTweet);
  54.         }
  55.  
  56.         private class ErrorFilterConsole : ErrorFilterModule
  57.         {
  58.             public void HookFiltering(IExceptionFiltering module)
  59.             {
  60.                 module.Filtering += new ExceptionFilterEventHandler(base.OnErrorModuleFiltering);
  61.             }
  62.         }
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement