/// <summary> /// Logs an exception to the configured error store, or the in-memory default store if none is configured. /// </summary> /// <param name="ex">The exception to log.</param> /// <param name="context">The HTTPContext to record variables from. If this isn't a web request, pass <see langword="null" /> in here.</param> /// <param name="category">The category to associate with this exception.</param> /// <param name="rollupPerServer">Whether to log up per-server, e.g. errors are only duplicates if they have same stack on the same machine.</param> /// <param name="customData">Any custom data to store with the exception like UserId, etc...this will be rendered as JSON in the error view for script use.</param> /// <param name="applicationName">If specified, the application name to log with, if not specified the name in <see cref="ErrorStoreSettings.ApplicationName"/> is used.</param> /// <returns>The Error created, if one was created and logged, null if nothing was logged.</returns> /// <remarks> /// When dealing with a non web requests, pass <see langword="null" /> in for context. /// It shouldn't be forgotten for most web application usages, so it's not an optional parameter. /// </remarks> public static Error Log( this Exception ex, HttpContext context, string category = null, bool rollupPerServer = false, Dictionary <string, string> customData = null, string applicationName = null) { if (Exceptional.IsLoggingEnabled) { try { var settings = context.RequestServices.GetRequiredService <IOptions <ExceptionalSettings> >().Value; // If we should be ignoring this exception, skip it entirely. if (!ex.ShouldBeIgnored(settings)) { // Create the error itself, populating CustomData with what was passed-in. var error = new Error(ex, settings, category, applicationName, rollupPerServer, customData); // Get everything from the HttpContext error.SetProperties(context); if (error.LogToStore()) { return(error); } } } catch (Exception e) { Trace.WriteLine(e); } } return(null); }
/// <summary> /// For logging an exception with no HttpContext, most commonly used in non-web applications /// so that they don't have to carry a reference to System.Web. /// </summary> /// <param name="ex">The exception to log.</param> /// <param name="category">The category to associate with this exception.</param> /// <param name="rollupPerServer">Whether to log up per-server, e.g. errors are only duplicates if they have same stack on the same machine.</param> /// <param name="customData">Any custom data to store with the exception like UserId, etc...this will be rendered as JSON in the error view for script use.</param> /// <param name="applicationName">If specified, the application name to log with, if not specified the name in <see cref="Settings.ApplicationName"/> is used.</param> public static Error LogNoContext( this Exception ex, string category = null, bool rollupPerServer = false, Dictionary <string, string> customData = null, string applicationName = null) { if (Settings.IsLoggingEnabled) { try { // If we should be ignoring this exception, skip it entirely. if (!ex.ShouldBeIgnored(Settings.Current)) { // Create the error itself, populating CustomData with what was passed-in. var error = new Error(ex, category, applicationName, rollupPerServer, customData); if (error.LogToStore()) { return(error); } } } catch (Exception e) { Trace.WriteLine(e); } } return(null); }
/// <summary> /// Logs an exception to the configured error store, or the in-memory default store if none is configured. /// </summary> /// <param name="ex">The exception to log.</param> /// <param name="context">The HTTPContext to record variables from. If this isn't a web request, pass <see langword="null" /> in here.</param> /// <param name="category">The category to associate with this exception.</param> /// <param name="rollupPerServer">Whether to log up per-server, e.g. errors are only duplicates if they have same stack on the same machine.</param> /// <param name="customData">Any custom data to store with the exception like UserId, etc...this will be rendered as JSON in the error view for script use.</param> /// <param name="applicationName">If specified, the application name to log with, if not specified the name in <see cref="Settings.ApplicationName"/> is used.</param> /// <returns>The Error created, if one was created and logged, null if nothing was logged.</returns> /// <remarks> /// When dealing with a non web requests, pass <see langword="null" /> in for context. /// It shouldn't be forgotten for most web application usages, so it's not an optional parameter. /// </remarks> public static Error Log( this Exception ex, HttpContext context, string category = null, bool rollupPerServer = false, Dictionary <string, string> customData = null, string applicationName = null) { if (Settings.IsLoggingEnabled) { try { // Legacy settings load (deserializes Web.config if needed) ConfigSettings.LoadSettings(); // If we should be ignoring this exception, skip it entirely. if (!ex.ShouldBeIgnored(Settings.Current)) { // Create the error itself, populating CustomData with what was passed-in. var error = new Error(ex, category, applicationName, rollupPerServer, customData); // Get everything from the HttpContext error.SetProperties(context); if (error.LogToStore()) { return(error); } } } catch (Exception e) { Trace.WriteLine(e); } } return(null); }