public void ThrowAndLogAndCatchBulkOutput(string exceptionMessage) { var loggerConfig = new LoggerConfiguration() .MinimumLevel.Debug() .Enrich.WithMachineName() .WriteTo.ColoredConsole() .WriteTo.Elasticsearch(_options); var logger = loggerConfig.CreateLogger(); using (logger as IDisposable) { try { try { throw new Exception("inner most exception"); } catch (Exception e) { var innerException = new NastyException("nasty inner exception", e); throw new Exception(exceptionMessage, innerException); } } catch (Exception e) { logger.Error(e, "Test exception. Should contain an embedded exception object."); } logger.Error("Test exception. Should not contain an embedded exception object."); } var postedEvents = GetPostedLogEvents(expectedCount: 2); Console.WriteLine("BULK OUTPUT BEGIN =========="); foreach (var post in _seenHttpPosts) Console.WriteLine(post); Console.WriteLine("BULK OUTPUT END ============"); var firstEvent = postedEvents[0]; firstEvent.Exceptions.Should().NotBeNull().And.HaveCount(3); firstEvent.Exceptions[0].Message.Should().NotBeNullOrWhiteSpace() .And.Be(exceptionMessage); var realException = firstEvent.Exceptions[0]; realException.ExceptionMethod.Should().NotBeNull(); realException.ExceptionMethod.Name.Should().NotBeNullOrWhiteSpace(); realException.ExceptionMethod.AssemblyName.Should().NotBeNullOrWhiteSpace(); realException.ExceptionMethod.AssemblyVersion.Should().NotBeNullOrWhiteSpace(); realException.ExceptionMethod.ClassName.Should().NotBeNullOrWhiteSpace(); realException.ExceptionMethod.Signature.Should().NotBeNullOrWhiteSpace(); realException.ExceptionMethod.MemberType.Should().BeGreaterThan(0); var nastyException = firstEvent.Exceptions[1]; nastyException.Depth.Should().Be(1); nastyException.Message.Should().Be("nasty inner exception"); nastyException.HelpUrl.Should().Be("help url"); nastyException.StackTraceString.Should().Be("stack trace string"); nastyException.RemoteStackTraceString.Should().Be("remote stack trace string"); nastyException.RemoteStackIndex.Should().Be(1); nastyException.HResult.Should().Be(123123); nastyException.Source.Should().Be("source"); nastyException.ClassName.Should().Be("classname nasty exception"); //nastyException.WatsonBuckets.Should().BeEquivalentTo(new byte[] {1,2,3}); var secondEvent = postedEvents[1]; secondEvent.Exceptions.Should().BeNullOrEmpty(); }
public void ThrowAndLogAndCatchBulkOutput(string exceptionMessage) { var loggerConfig = new LoggerConfiguration() .MinimumLevel.Debug() .Enrich.WithMachineName() .WriteTo.ColoredConsole() .WriteTo.Elasticsearch(_options); var logger = loggerConfig.CreateLogger(); using (logger as IDisposable) { try { try { throw new Exception("inner most exception"); } catch (Exception e) { var innerException = new NastyException("nasty inner exception", e); throw new Exception(exceptionMessage, innerException); } } catch (Exception e) { logger.Error(e, "Test exception. Should contain an embedded exception object."); } logger.Error("Test exception. Should not contain an embedded exception object."); } var postedEvents = this.GetPostedLogEvents(expectedCount: 2); Console.WriteLine("BULK OUTPUT BEGIN =========="); foreach (var post in _seenHttpPosts) { Console.WriteLine(post); } Console.WriteLine("BULK OUTPUT END ============"); var firstEvent = postedEvents[0]; firstEvent.Exceptions.Should().NotBeNull().And.HaveCount(3); firstEvent.Exceptions[0].Message.Should().NotBeNullOrWhiteSpace() .And.Be(exceptionMessage); var realException = firstEvent.Exceptions[0]; realException.ExceptionMethod.Should().NotBeNull(); realException.ExceptionMethod.Name.Should().NotBeNullOrWhiteSpace(); realException.ExceptionMethod.AssemblyName.Should().NotBeNullOrWhiteSpace(); realException.ExceptionMethod.AssemblyVersion.Should().NotBeNullOrWhiteSpace(); realException.ExceptionMethod.ClassName.Should().NotBeNullOrWhiteSpace(); realException.ExceptionMethod.Signature.Should().NotBeNullOrWhiteSpace(); realException.ExceptionMethod.MemberType.Should().BeGreaterThan(0); var nastyException = firstEvent.Exceptions[1]; nastyException.Depth.Should().Be(1); nastyException.Message.Should().Be("nasty inner exception"); nastyException.HelpUrl.Should().Be("help url"); nastyException.StackTraceString.Should().Be("stack trace string"); nastyException.RemoteStackTraceString.Should().Be("remote stack trace string"); nastyException.RemoteStackIndex.Should().Be(1); nastyException.HResult.Should().Be(123123); nastyException.Source.Should().Be("source"); nastyException.ClassName.Should().Be("classname nasty exception"); //nastyException.WatsonBuckets.Should().BeEquivalentTo(new byte[] {1,2,3}); var secondEvent = postedEvents[1]; secondEvent.Exceptions.Should().BeNullOrEmpty(); }