public void ProgramFailureTest() { using (DataLoggerEventSource itemToTest = DataLoggerEventSource.Log()) using (EventListener lisner = new EventListener()) { List <EventWrittenEventArgs> eventsList = new List <EventWrittenEventArgs>(); lisner.EventWritten += (source, entry) => eventsList.Add(entry); Assert.AreEqual <int>(0, eventsList.Count); lisner.EnableEvents(itemToTest, EventLevel.LogAlways, EventKeywords.All); itemToTest.ProgramFailure("ClassName", "problem"); Assert.AreEqual <int>(1, eventsList.Count); EventWrittenEventArgs eventArgs = eventsList[0]; Assert.AreEqual <int>(1, eventArgs.EventId); Assert.AreEqual <string>("At ClassName.ProgramFailureTest encountered application failure: problem", String.Format(eventArgs.Message, eventArgs.Payload.Select <object, string>(x => x.ToString()).ToArray <string>())); Assert.AreEqual <EventChannel>(EventChannel.Admin, eventArgs.Channel); Assert.AreEqual <int>(1, eventArgs.EventId); Assert.AreEqual <string>(nameof(DataLoggerEventSource.ProgramFailure), eventArgs.EventName); Assert.AreSame(DataLoggerEventSource.Log(), eventArgs.EventSource); Assert.IsTrue((DataLoggerEventSource.Keywords.Diagnostic & eventArgs.Keywords) > 0); Assert.AreEqual <EventLevel>(EventLevel.Error, eventArgs.Level); Assert.AreEqual <EventOpcode>(EventOpcode.Info, eventArgs.Opcode); Assert.AreEqual <EventTask>(DataLoggerEventSource.Tasks.Code, eventArgs.Task); Assert.AreEqual <byte>(0x01, eventArgs.Version); } }
/// <summary> /// Logs the exception using <see cref="DataLoggerEventSource" />. /// </summary> /// <param name="eventSource">The event source to be used for problem reporting.</param> /// <param name="className">Name of the class where the exception has been caught.</param> /// <param name="e">The exception to be reported.</param> /// <param name="methodName">Name of the method.</param> internal static void LogException(this DataLoggerEventSource eventSource, string className, Exception e, [CallerMemberName] string methodName = nameof(LogException)) { Exception _exception = e; string _innerText = "An exception has been caught:"; while (e != null) { eventSource.ProgramFailure(className, methodName, $"{_innerText} of type {_exception.GetType().Name} capturing the message: {e.Message}"); e = e.InnerException; _innerText = "It contains inner exception:"; } }