From 62823688a378927e52c63d52841386d94061b3a2 Mon Sep 17 00:00:00 2001 From: Alexander Paul Date: Wed, 26 Dec 2018 14:08:05 +0100 Subject: [PATCH] Issue 225 - Improve logging in example for WireMock as Windows Service (#247) --- examples/WireMock.Net.Service/Program.cs | 19 ++++++--- .../WireMock.Net.Service.csproj | 7 ++++ .../WireMockLog4NetLogger.cs | 39 +++++++++++++++++++ examples/WireMock.Net.Service/log4net.config | 38 ++++++++++++++++++ examples/WireMock.Net.Service/packages.config | 1 + 5 files changed, 98 insertions(+), 6 deletions(-) create mode 100644 examples/WireMock.Net.Service/WireMockLog4NetLogger.cs create mode 100644 examples/WireMock.Net.Service/log4net.config diff --git a/examples/WireMock.Net.Service/Program.cs b/examples/WireMock.Net.Service/Program.cs index 4af32622..ae9abdd9 100644 --- a/examples/WireMock.Net.Service/Program.cs +++ b/examples/WireMock.Net.Service/Program.cs @@ -1,6 +1,8 @@ -using System; +using log4net.Config; +using System; +using System.IO; using System.ServiceProcess; -using WireMock.Logging; +using WireMock.Net.Service; using WireMock.Net.StandAlone; using WireMock.Server; using WireMock.Settings; @@ -21,7 +23,7 @@ namespace Wiremock.Net.Service protected override void OnStart(string[] args) { - Start(new WireMockNullLogger()); + Start(); } protected override void OnStop() @@ -35,6 +37,11 @@ namespace Wiremock.Net.Service static void Main(string[] args) { + //Setting the current directory explicitly is required if the application is running as Windows Service, + //as the current directory of a Windows Service is %WinDir%\System32 per default. + Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); + XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config")); + // running as service if (!Environment.UserInteractive) { @@ -46,7 +53,7 @@ namespace Wiremock.Net.Service else { // running as console app - Start(new WireMockConsoleLogger()); + Start(); Console.WriteLine("Press any key to stop..."); Console.ReadKey(true); @@ -55,14 +62,14 @@ namespace Wiremock.Net.Service } } - private static void Start(IWireMockLogger logger) + private static void Start() { _server = StandAloneApp.Start(new FluentMockServerSettings { Urls = new[] { "http://*:9091/" }, StartAdminInterface = true, ReadStaticMappings = true, - Logger = logger + Logger = new WireMockLog4NetLogger() }); } diff --git a/examples/WireMock.Net.Service/WireMock.Net.Service.csproj b/examples/WireMock.Net.Service/WireMock.Net.Service.csproj index 7712a830..b694d871 100644 --- a/examples/WireMock.Net.Service/WireMock.Net.Service.csproj +++ b/examples/WireMock.Net.Service/WireMock.Net.Service.csproj @@ -35,6 +35,9 @@ ..\..\packages\Handlebars.Net.1.9.5\lib\net452\Handlebars.dll + + ..\..\packages\log4net.2.0.8\lib\net45-full\log4net.dll + ..\..\packages\Microsoft.Owin.2.0.2\lib\net45\Microsoft.Owin.dll @@ -96,9 +99,13 @@ + + + Always + PreserveNewest diff --git a/examples/WireMock.Net.Service/WireMockLog4NetLogger.cs b/examples/WireMock.Net.Service/WireMockLog4NetLogger.cs new file mode 100644 index 00000000..a1d7be2c --- /dev/null +++ b/examples/WireMock.Net.Service/WireMockLog4NetLogger.cs @@ -0,0 +1,39 @@ +using log4net; +using Newtonsoft.Json; +using Wiremock.Net.Service; +using WireMock.Admin.Requests; +using WireMock.Logging; + +namespace WireMock.Net.Service +{ + internal class WireMockLog4NetLogger : IWireMockLogger + { + private static readonly ILog Log = LogManager.GetLogger(typeof(Program)); + + public void Debug(string formatString, params object[] args) + { + Log.DebugFormat(formatString, args); + } + + public void Info(string formatString, params object[] args) + { + Log.InfoFormat(formatString, args); + } + + public void Warn(string formatString, params object[] args) + { + Log.WarnFormat(formatString, args); + } + + public void Error(string formatString, params object[] args) + { + Log.ErrorFormat(formatString, args); + } + + public void DebugRequestResponse(LogEntryModel logEntryModel, bool isAdminRequest) + { + string message = JsonConvert.SerializeObject(logEntryModel, Formatting.Indented); + Log.DebugFormat("Admin[{0}] {1}", isAdminRequest, message); + } + } +} \ No newline at end of file diff --git a/examples/WireMock.Net.Service/log4net.config b/examples/WireMock.Net.Service/log4net.config new file mode 100644 index 00000000..980100eb --- /dev/null +++ b/examples/WireMock.Net.Service/log4net.config @@ -0,0 +1,38 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/WireMock.Net.Service/packages.config b/examples/WireMock.Net.Service/packages.config index 202d6ffd..e0ea0153 100644 --- a/examples/WireMock.Net.Service/packages.config +++ b/examples/WireMock.Net.Service/packages.config @@ -1,6 +1,7 @@  +