From 10c9627c19147cf9597da6d4e671e78c1ecb1c12 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 25 Jan 2020 15:17:22 +0100 Subject: [PATCH] Log Exception --- .../WireMockLog4NetLogger.cs | 8 +++++++- .../WireMockLog4NetLogger.cs | 9 +++++++-- .../Logging/IWireMockLogger.cs | 11 ++++++++++- .../Logging/WireMockConsoleLogger.cs | 17 ++++++++++++++++- src/WireMock.Net/Logging/WireMockNullLogger.cs | 11 +++++++++-- .../Owin/GlobalExceptionMiddleware.cs | 2 +- src/WireMock.Net/Server/WireMockServer.Admin.cs | 4 ++-- 7 files changed, 52 insertions(+), 10 deletions(-) diff --git a/examples/WireMock.Net.Service/WireMockLog4NetLogger.cs b/examples/WireMock.Net.Service/WireMockLog4NetLogger.cs index a1d7be2c8..62d79d683 100644 --- a/examples/WireMock.Net.Service/WireMockLog4NetLogger.cs +++ b/examples/WireMock.Net.Service/WireMockLog4NetLogger.cs @@ -1,4 +1,5 @@ -using log4net; +using System; +using log4net; using Newtonsoft.Json; using Wiremock.Net.Service; using WireMock.Admin.Requests; @@ -30,6 +31,11 @@ public void Error(string formatString, params object[] args) Log.ErrorFormat(formatString, args); } + public void Error(string message, Exception exception) + { + Log.Error(message, exception); + } + public void DebugRequestResponse(LogEntryModel logEntryModel, bool isAdminRequest) { string message = JsonConvert.SerializeObject(logEntryModel, Formatting.Indented); diff --git a/examples/WireMock.Net.StandAlone.NETCoreApp/WireMockLog4NetLogger.cs b/examples/WireMock.Net.StandAlone.NETCoreApp/WireMockLog4NetLogger.cs index 033894bb7..a0ed6b15f 100644 --- a/examples/WireMock.Net.StandAlone.NETCoreApp/WireMockLog4NetLogger.cs +++ b/examples/WireMock.Net.StandAlone.NETCoreApp/WireMockLog4NetLogger.cs @@ -1,7 +1,7 @@ -using log4net; +using System; +using log4net; using Newtonsoft.Json; using WireMock.Logging; -using WireMock.Models.Requests; namespace WireMock.Net.StandAlone.NETCoreApp { @@ -29,6 +29,11 @@ public void Error(string formatString, params object[] args) Log.ErrorFormat(formatString, args); } + public void Error(string message, Exception exception) + { + Log.Error(message, exception); + } + public void DebugRequestResponse(LogEntryModel logEntryModel, bool isAdminRequest) { string message = JsonConvert.SerializeObject(logEntryModel, Formatting.Indented); diff --git a/src/WireMock.Net.Abstractions/Logging/IWireMockLogger.cs b/src/WireMock.Net.Abstractions/Logging/IWireMockLogger.cs index 86a1a2d1c..a1849813d 100644 --- a/src/WireMock.Net.Abstractions/Logging/IWireMockLogger.cs +++ b/src/WireMock.Net.Abstractions/Logging/IWireMockLogger.cs @@ -1,4 +1,5 @@ -using JetBrains.Annotations; +using System; +using JetBrains.Annotations; using WireMock.Admin.Requests; namespace WireMock.Logging @@ -45,6 +46,14 @@ public interface IWireMockLogger [StringFormatMethod("formatString")] void Error([NotNull] string formatString, [NotNull] params object[] args); + /// + /// Writes the message at the Error level using the specified exception. + /// + /// The message. + /// The exception. + [PublicAPI] + void Error([NotNull] string message, [NotNull] Exception exception); + /// /// Writes the LogEntryModel (LogRequestModel, LogResponseModel and more). /// diff --git a/src/WireMock.Net/Logging/WireMockConsoleLogger.cs b/src/WireMock.Net/Logging/WireMockConsoleLogger.cs index 51dc8c838..fcb588c9a 100644 --- a/src/WireMock.Net/Logging/WireMockConsoleLogger.cs +++ b/src/WireMock.Net/Logging/WireMockConsoleLogger.cs @@ -36,12 +36,27 @@ public void Warn(string formatString, params object[] args) Console.WriteLine(Format("Warn", formatString, args)); } - /// + /// public void Error(string formatString, params object[] args) { Console.WriteLine(Format("Error", formatString, args)); } + /// + public void Error(string formatString, Exception exception) + { + Console.WriteLine(Format("Error", formatString, exception.Message)); + + if (exception is AggregateException ae) + { + ae.Handle(ex => + { + Console.WriteLine(Format("Error", "Exception {0}", exception.Message)); + return true; + }); + } + } + /// public void DebugRequestResponse(LogEntryModel logEntryModel, bool isAdminRequest) { diff --git a/src/WireMock.Net/Logging/WireMockNullLogger.cs b/src/WireMock.Net/Logging/WireMockNullLogger.cs index f1627a796..8e55a69d9 100644 --- a/src/WireMock.Net/Logging/WireMockNullLogger.cs +++ b/src/WireMock.Net/Logging/WireMockNullLogger.cs @@ -1,4 +1,5 @@ -using WireMock.Admin.Requests; +using System; +using WireMock.Admin.Requests; namespace WireMock.Logging { @@ -26,12 +27,18 @@ public void Warn(string formatString, params object[] args) // Log nothing } - /// + /// public void Error(string formatString, params object[] args) { // Log nothing } + /// + public void Error(string formatString, Exception exception) + { + // Log nothing + } + /// public void DebugRequestResponse(LogEntryModel logEntryModel, bool isAdminRequest) { diff --git a/src/WireMock.Net/Owin/GlobalExceptionMiddleware.cs b/src/WireMock.Net/Owin/GlobalExceptionMiddleware.cs index 72ba82216..7aa03e712 100644 --- a/src/WireMock.Net/Owin/GlobalExceptionMiddleware.cs +++ b/src/WireMock.Net/Owin/GlobalExceptionMiddleware.cs @@ -63,7 +63,7 @@ private async Task InvokeInternal(IContext ctx) } catch (Exception ex) { - _options.Logger.Error("HttpStatusCode set to 500 {0}", ex); + _options.Logger.Error("HttpStatusCode set to 500", ex); await _responseMapper.MapAsync(ResponseMessageBuilder.Create(JsonConvert.SerializeObject(ex), 500), ctx.Response); } } diff --git a/src/WireMock.Net/Server/WireMockServer.Admin.cs b/src/WireMock.Net/Server/WireMockServer.Admin.cs index 73852d7af..8ad49169c 100644 --- a/src/WireMock.Net/Server/WireMockServer.Admin.cs +++ b/src/WireMock.Net/Server/WireMockServer.Admin.cs @@ -490,12 +490,12 @@ private ResponseMessage MappingsPost(RequestMessage requestMessage) } catch (ArgumentException a) { - _settings.Logger.Error("HttpStatusCode set to 400 {0}", a); + _settings.Logger.Error("HttpStatusCode set to 400", a); return ResponseMessageBuilder.Create(a.Message, 400); } catch (Exception e) { - _settings.Logger.Error("HttpStatusCode set to 500 {0}", e); + _settings.Logger.Error("HttpStatusCode set to 500", e); return ResponseMessageBuilder.Create(e.ToString(), 500); } }