diff --git a/Core/Eisk.Core/Eisk.Core.csproj b/Core/Eisk.Core/Eisk.Core.csproj
index efe49ef..b5649bb 100644
--- a/Core/Eisk.Core/Eisk.Core.csproj
+++ b/Core/Eisk.Core/Eisk.Core.csproj
@@ -5,6 +5,7 @@
+
diff --git a/Core/Eisk.Core/Exceptions/GlobalExceptionHandler.cs b/Core/Eisk.Core/Exceptions/GlobalExceptionHandler.cs
new file mode 100644
index 0000000..e96cc39
--- /dev/null
+++ b/Core/Eisk.Core/Exceptions/GlobalExceptionHandler.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Eisk.Core.Logger;
+using Eisk.Domains.Entities;
+
+namespace Eisk.Core.Exceptions
+{
+ public class GlobalExceptionHandler
+ {
+ private readonly RequestDelegate _next;
+ private readonly ILogger _logger;
+
+ public GlobalExceptionHandler(RequestDelegate next, ILogger logger)
+ {
+ this._next = next;
+ this._logger = logger;
+ }
+
+ public async Task InvokeAsync(HttpContext httpContext)
+ {
+ try
+ {
+ await _next(httpContext);
+ }
+ catch(Exception exception)
+ {
+ _logger.Error($"Error in processing request: {exception}");
+ await HandleExceptionAsync(httpContext, exception);
+ }
+ }
+
+ private Task HandleExceptionAsync(HttpContext context, Exception exception)
+ {
+ context.Response.ContentType = "application/json";
+ context.Response.StatusCode = (int) HttpStatusCode.InternalServerError;
+
+ return context.Response.WriteAsync(new ErrorDetails()
+ {
+ ErrorCode = context.Response.StatusCode,
+ ErrorMessage = exception.Message
+ }.ToString());
+ }
+
+
+ }
+}
diff --git a/Core/Eisk.Core/Logger/Logger.cs b/Core/Eisk.Core/Logger/Logger.cs
new file mode 100644
index 0000000..f33fac8
--- /dev/null
+++ b/Core/Eisk.Core/Logger/Logger.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Text;
+using log4net;
+
+namespace Eisk.Core.Logger
+{
+ //wrapper for logger class
+ public interface ILogger
+ {
+ void Info(string message);
+ void Warn(string message);
+ void Debug(string message);
+ void Error(string message);
+ }
+
+ ///
+ /// Responsible for global logging
+ ///
+ public class Logger : ILogger
+ {
+ private ILog _logger;
+
+ public Logger()
+ {
+ this._logger = LogManager.GetLogger(Assembly.GetCallingAssembly(), "logger");
+ }
+
+ public Logger(Type logClass)
+ {
+ this._logger = LogManager.GetLogger(logClass);
+ }
+
+ public void Debug(string message)
+ {
+ _logger.Debug(message);
+ }
+
+ public void Error(string message)
+ {
+ _logger.Error(message);
+ }
+
+ public void Info(string message)
+ {
+ _logger.Info(message);
+ }
+
+ public void Warn(string message)
+ {
+ _logger.Warn(message);
+ }
+ }
+}
+
diff --git a/DomainCore/Eisk.Domains/Entities/ErrorDetails.cs b/DomainCore/Eisk.Domains/Entities/ErrorDetails.cs
new file mode 100644
index 0000000..c76b6e9
--- /dev/null
+++ b/DomainCore/Eisk.Domains/Entities/ErrorDetails.cs
@@ -0,0 +1,15 @@
+using Newtonsoft.Json;
+
+namespace Eisk.Domains.Entities
+{
+ public class ErrorDetails
+ {
+ public int ErrorCode { get; set; }
+ public string ErrorMessage { get; set; }
+
+ public override string ToString()
+ {
+ return JsonConvert.SerializeObject(this);
+ }
+ }
+}
diff --git a/WebApi/Eisk.WebApi/Controllers/EmployeesController.cs b/WebApi/Eisk.WebApi/Controllers/EmployeesController.cs
index 86de726..a51eca2 100644
--- a/WebApi/Eisk.WebApi/Controllers/EmployeesController.cs
+++ b/WebApi/Eisk.WebApi/Controllers/EmployeesController.cs
@@ -8,7 +8,7 @@ public class EmployeesController : WebApiControllerBase
{
public EmployeesController(EmployeeDomainService employeeDomainService):base(employeeDomainService)
{
-
+ throw new System.Exception("test");
}
}
}
diff --git a/WebApi/Eisk.WebApi/Eisk.WebApi.csproj b/WebApi/Eisk.WebApi/Eisk.WebApi.csproj
index 1472bda..4e9ccf9 100644
--- a/WebApi/Eisk.WebApi/Eisk.WebApi.csproj
+++ b/WebApi/Eisk.WebApi/Eisk.WebApi.csproj
@@ -12,6 +12,7 @@
+
diff --git a/WebApi/Eisk.WebApi/Program.cs b/WebApi/Eisk.WebApi/Program.cs
index baf704e..ab4c136 100644
--- a/WebApi/Eisk.WebApi/Program.cs
+++ b/WebApi/Eisk.WebApi/Program.cs
@@ -1,5 +1,9 @@
-using Microsoft.AspNetCore;
+using System.Reflection;
+using System.IO;
+using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
+using log4net;
+using log4net.Config;
namespace Eisk.WebApi
{
@@ -7,6 +11,9 @@ public class Program
{
public static void Main(string[] args)
{
+ var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
+ XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
+
BuildWebHost(args).Run();
}
diff --git a/WebApi/Eisk.WebApi/Startup.cs b/WebApi/Eisk.WebApi/Startup.cs
index be94df9..050e8cd 100644
--- a/WebApi/Eisk.WebApi/Startup.cs
+++ b/WebApi/Eisk.WebApi/Startup.cs
@@ -15,6 +15,8 @@ namespace Eisk.WebApi
using DataServices.Interfaces;
using DomainServices;
using EFCore.Setup;
+ using Eisk.Core.Exceptions;
+ using Eisk.Core.Logger;
public class Startup
{
@@ -46,6 +48,9 @@ public void ConfigureServices(IServiceCollection services)
services.AddTransient();
+ //Logging service
+ services.AddSingleton();
+
services.AddMvc();
// Register the Swagger generator, defining 1 or more Swagger documents
@@ -77,6 +82,9 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env)
app.UseDeveloperExceptionPage();
}
+ //global exception middleware
+ app.UseMiddleware();
+
// Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();
diff --git a/WebApi/Eisk.WebApi/log4net.config b/WebApi/Eisk.WebApi/log4net.config
new file mode 100644
index 0000000..808e44f
--- /dev/null
+++ b/WebApi/Eisk.WebApi/log4net.config
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file