public void Notify(Exception e, ErrorSeverity severity = ErrorSeverity.Error, Metadata extraMetadata = null) { if (!ShouldNotify) { return; } if (IgnoredExceptions != null && IgnoredExceptions.Contains(e.GetType())) { return; } var md = new Metadata(metadata); if (extraMetadata != null) { md.Merge(extraMetadata); } var ev = new Event() { User = userInfo, App = GetAppInfo(), AppState = GetAppState(), System = GetSystemInfo(), SystemState = GetSystemState(), Context = Context, Severity = severity, Exceptions = ConvertExceptionTree(e), Metadata = md, }; SendEvent(ev); }
public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter) { var exceptionIsIgnored = IgnoredExceptions.Contains(exception?.GetType()); if (logLevel == LogLevel.Critical && ThrowOnCriticalErrors && !exceptionIsIgnored) { var log = $"Log {logLevel}[{eventId}]: {formatter(state, exception)} {exception}"; Console.WriteLine(log); if (logLevel == LogLevel.Critical && ThrowOnCriticalErrors && !exceptionIsIgnored) { throw new Exception($"Unexpected critical error. {log}", exception); } } // Fail tests where not all the connections close during server shutdown. if (eventId.Id == 21 && eventId.Name == nameof(KestrelTrace.NotAllConnectionsAborted)) { var log = $"Log {logLevel}[{eventId}]: {formatter(state, exception)} {exception?.Message}"; throw new Exception($"Shutdown failure. {log}"); } Messages.Enqueue(new LogMessage { LogLevel = logLevel, EventId = eventId, Exception = exception, Message = formatter(state, exception) }); }
public void Notify(Exception e, ErrorSeverity severity = ErrorSeverity.Error, Metadata extraMetadata = null) { if (!ShouldNotify) { return; } if (IgnoredExceptions != null && IgnoredExceptions.Contains(e.GetType())) { return; } var md = new Metadata(metadata); if (extraMetadata != null) { md.Merge(extraMetadata); } notifier.Notify(new Event() { User = GetUserInfo(), App = state.GetApplicationInfo(), AppState = state.GetApplicationState(), System = state.GetSystemInfo(), SystemState = state.GetSystemState(), Context = Context, Severity = severity, Exceptions = exceptionConverter.Convert(e), Metadata = md, }); }
/// <summary> /// For after scnearion hooks. /// </summary> public void ContinueOnError(Action action) { try { action(); } catch (Exception e) { Exception = e; IgnoredExceptions.Add(e); } }
public void Invoke(T target) { var wait = new DefaultWait <T>(target) { PollingInterval = PollingInterval, Timeout = Timeout, Message = string.Format("Failed to perform {0}", _action) }; wait.IgnoreExceptionTypes(IgnoredExceptions.ToArray()); wait.Until(InvokeConditionalAction); }
public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter) { var exceptionIsIgnored = IgnoredExceptions.Contains(exception?.GetType()); if (logLevel == LogLevel.Critical && ThrowOnCriticalErrors && !exceptionIsIgnored) { var log = $"Log {logLevel}[{eventId}]: {formatter(state, exception)} {exception}"; Console.WriteLine(log); if (logLevel == LogLevel.Critical && ThrowOnCriticalErrors && !exceptionIsIgnored) { throw new Exception($"Unexpected critical error. {log}", exception); } } // Fail tests where not all the connections close during server shutdown. if (ThrowOnUngracefulShutdown && ((eventId.Id == 16 && eventId.Name == nameof(KestrelTrace.NotAllConnectionsClosedGracefully)) || (eventId.Id == 21 && eventId.Name == nameof(KestrelTrace.NotAllConnectionsAborted)))) { var log = $"Log {logLevel}[{eventId}]: {formatter(state, exception)} {exception}"; throw new Exception($"Shutdown failure. {log}"); } // We don't use nameof here because this is logged by the transports and we don't know which one is // referenced in this shared source file. if (eventId.Id == 14 && eventId.Name == "ConnectionError") { var log = $"Log {logLevel}[{eventId}]: {formatter(state, exception)} {exception}"; throw new Exception($"Unexpected connection error. {log}"); } var logMessage = new LogMessage { LogLevel = logLevel, EventId = eventId, Exception = exception, Message = formatter(state, exception) }; Messages.Enqueue(logMessage); if (_messageFilter?.Invoke(logMessage) == true) { var localTcs = _messageFilterTcs; // need to set tcs to null before calling TrySetResult // to prevent the next WaitForMessage possibly throwing for a non-null tcs _messageFilterTcs = null; localTcs.TrySetResult(logMessage); } }
public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter) { var exceptionIsIgnored = IgnoredExceptions.Contains(exception?.GetType()); if (logLevel == LogLevel.Critical && ThrowOnCriticalErrors && !exceptionIsIgnored) { var log = $"Log {logLevel}[{eventId}]: {formatter(state, exception)} {exception}"; Console.WriteLine(log); if (logLevel == LogLevel.Critical && ThrowOnCriticalErrors && !exceptionIsIgnored) { throw new Exception($"Unexpected critical error. {log}", exception); } } // Fail tests where not all the connections close during server shutdown. if (ThrowOnUngracefulShutdown && ((eventId.Id == 16 && eventId.Name == nameof(KestrelTrace.NotAllConnectionsClosedGracefully)) || (eventId.Id == 21 && eventId.Name == nameof(KestrelTrace.NotAllConnectionsAborted)))) { var log = $"Log {logLevel}[{eventId}]: {formatter(state, exception)} {exception}"; throw new Exception($"Shutdown failure. {log}"); } // We don't use nameof here because this is logged by the transports and we don't know which one is // referenced in this shared source file. if (eventId.Id == 14 && eventId.Name == "ConnectionError") { var log = $"Log {logLevel}[{eventId}]: {formatter(state, exception)} {exception}"; throw new Exception($"Unexpected connection error. {log}"); } Messages.Enqueue(new LogMessage { LogLevel = logLevel, EventId = eventId, Exception = exception, Message = formatter(state, exception) }); }