-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #20 from Ignition-Group-Open-Source-Contrib/jaymin…
…/ExceptionMiddlewareImpl Jaymin/exception middleware impl
- Loading branch information
Showing
10 changed files
with
270 additions
and
50 deletions.
There are no files selected for viewing
82 changes: 82 additions & 0 deletions
82
DaprMicroserviceTemplate/Middleware/ExceptionMiddleware.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
using AutoWrapper.Wrappers; | ||
using log4net; | ||
using Microsoft.AspNetCore.Http; | ||
using System; | ||
using System.Net; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
//using LogzLoggerProvider; | ||
|
||
namespace DaprMicroserviceTemplate.Middleware | ||
{ | ||
public class ExceptionMiddleware | ||
Check warning on line 12 in DaprMicroserviceTemplate/Middleware/ExceptionMiddleware.cs
|
||
{ | ||
private readonly RequestDelegate _next; | ||
private static readonly ILog _logger = LogManager.GetLogger(typeof(ExceptionMiddleware)); | ||
public ExceptionMiddleware(RequestDelegate next) | ||
Check warning on line 16 in DaprMicroserviceTemplate/Middleware/ExceptionMiddleware.cs
|
||
{ | ||
_next = next; | ||
} | ||
public async Task InvokeAsync(HttpContext httpContext) | ||
Check warning on line 20 in DaprMicroserviceTemplate/Middleware/ExceptionMiddleware.cs
|
||
{ | ||
var requestContent = string.Empty; | ||
var request = httpContext?.Request; | ||
try | ||
{ | ||
if ((request.Method == HttpMethods.Post || request.Method == HttpMethods.Put) && request.ContentLength > 0) | ||
{ | ||
request.EnableBuffering(); | ||
var buffer = new byte[Convert.ToInt32(request.ContentLength)]; | ||
await request.Body.ReadAsync(buffer, 0, buffer.Length); | ||
//get body string here... | ||
requestContent = Encoding.UTF8.GetString(buffer); | ||
request.Body.Position = 0; //rewinding the stream to 0 | ||
} | ||
var requestedData = PrepareRequestedData(httpContext, requestContent); | ||
|
||
//Please uncomment below line and allow for global start logs | ||
// _logger.ServiceStarted(list: requestedData); | ||
|
||
await _next(httpContext); | ||
} | ||
catch (Exception ex) | ||
{ | ||
var requestedData = PrepareRequestedData(httpContext, requestContent); | ||
await HandleExceptionAsync(httpContext, ex, requestedData); | ||
} | ||
} | ||
private async Task HandleExceptionAsync(HttpContext context, Exception exception, object[] requestedData) | ||
{ | ||
var path = context.Request?.Path; | ||
int statusCode; | ||
|
||
//Please uncomment below line and allow for global exception logs | ||
//_logger.ServiceFaulted(exception, path, requestedData); | ||
|
||
switch (true) | ||
{ | ||
case bool _ when exception is ApiException: | ||
statusCode = (int)HttpStatusCode.BadRequest; | ||
break; | ||
|
||
default: | ||
statusCode = (int)HttpStatusCode.InternalServerError; | ||
break; | ||
} | ||
context.Response.StatusCode = statusCode; | ||
context.Response.ContentType = "application/json"; | ||
await context.Response.WriteAsync(exception.GetBaseException().Message); | ||
} | ||
|
||
private object[] PrepareRequestedData(HttpContext context, string requestBodyJson) | ||
{ | ||
var request = context?.Request; | ||
var requestData = new object[]{ | ||
request?.Method, | ||
requestBodyJson, | ||
request?.QueryString}; | ||
return requestData; | ||
} | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project"> | ||
<TemplateData> | ||
<Name>DaprMicroserviceTemplate</Name> | ||
<Description>Dapr Microservice Template</Description> | ||
<ProjectType>CSharp</ProjectType> | ||
<ProjectSubType> | ||
</ProjectSubType> | ||
<SortOrder>1000</SortOrder> | ||
<CreateNewFolder>true</CreateNewFolder> | ||
<DefaultName>DaprMicroserviceTemplate</DefaultName> | ||
<ProvideDefaultName>true</ProvideDefaultName> | ||
<LocationField>Enabled</LocationField> | ||
<EnableLocationBrowseButton>true</EnableLocationBrowseButton> | ||
<CreateInPlace>true</CreateInPlace> | ||
<Icon>__TemplateIcon.png</Icon> | ||
<PreviewImage>__PreviewImage.png</PreviewImage> | ||
</TemplateData> | ||
<TemplateContent> | ||
<Project TargetFileName="DaprMicroserviceTemplate.csproj" File="DaprMicroserviceTemplate.csproj" ReplaceParameters="true"> | ||
<Folder Name="Properties" TargetFolderName="Properties"> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="launchSettings.json">launchSettings.json</ProjectItem> | ||
</Folder> | ||
<Folder Name="Controllers" TargetFolderName="Controllers"> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="WeatherForecastController.cs">WeatherForecastController.cs</ProjectItem> | ||
</Folder> | ||
<Folder Name="Middleware" TargetFolderName="Middleware"> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="ExceptionMiddleware.cs">ExceptionMiddleware.cs</ProjectItem> | ||
</Folder> | ||
<Folder Name="deploy" TargetFolderName="deploy"> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="data.txt">data.txt</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deploy.tt">deploy.tt</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deploy.yaml">deploy.yaml</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deployDev.yaml">deployDev.yaml</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deployLocal.yaml">deployLocal.yaml</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deployLocalFromAcr.yaml">deployLocalFromAcr.yaml</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deployProd.yaml">deployProd.yaml</ProjectItem> | ||
</Folder> | ||
<Folder Name="T4Include" TargetFolderName="T4Include"> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deploy.ttinclude">deploy.ttinclude</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net.ttinclude">log4net.ttinclude</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net2.ttinclude">log4net2.ttinclude</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="pipeline.ttinclude">pipeline.ttinclude</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="TemplateFileManager.CS.ttinclude">TemplateFileManager.CS.ttinclude</ProjectItem> | ||
</Folder> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="appsettings.Development.json">appsettings.Development.json</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="appsettings.json">appsettings.json</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="azure-pipelines.tt">azure-pipelines.tt</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="azure-pipelines.yml">azure-pipelines.yml</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="build">build</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="Dockerfile">Dockerfile</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="dockerLocal">dockerLocal</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net.Development.config">log4net.Development.config</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net.Production.config">log4net.Production.config</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net.tt">log4net.tt</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net.config">log4net.config</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="NuGet.Config">NuGet.Config</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="Program.cs">Program.cs</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="Readme.md">Readme.md</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="Startup.cs">Startup.cs</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="WeatherForecast.cs">WeatherForecast.cs</ProjectItem> | ||
</Project> | ||
</TemplateContent> | ||
<WizardExtension> | ||
<Assembly>MicroserviceTemplateInstallerVS2022, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=22eb75c2263e562b</Assembly> | ||
<FullClassName>MicroserviceTemplateInstallerVS2022.WizardImplementation</FullClassName> | ||
</WizardExtension> | ||
</VSTemplate> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project"> | ||
<TemplateData> | ||
<Name>DaprMicroserviceTemplate</Name> | ||
<Description>Dapr Microservice Template</Description> | ||
<ProjectType>CSharp</ProjectType> | ||
<ProjectSubType> | ||
</ProjectSubType> | ||
<SortOrder>1000</SortOrder> | ||
<CreateNewFolder>true</CreateNewFolder> | ||
<DefaultName>DaprMicroserviceTemplate</DefaultName> | ||
<ProvideDefaultName>true</ProvideDefaultName> | ||
<LocationField>Enabled</LocationField> | ||
<EnableLocationBrowseButton>true</EnableLocationBrowseButton> | ||
<CreateInPlace>true</CreateInPlace> | ||
<Icon>__TemplateIcon.png</Icon> | ||
<PreviewImage>__PreviewImage.png</PreviewImage> | ||
</TemplateData> | ||
<TemplateContent> | ||
<Project TargetFileName="DaprMicroserviceTemplate.csproj" File="DaprMicroserviceTemplate.csproj" ReplaceParameters="true"> | ||
<Folder Name="Properties" TargetFolderName="Properties"> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="launchSettings.json">launchSettings.json</ProjectItem> | ||
</Folder> | ||
<Folder Name="Controllers" TargetFolderName="Controllers"> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="WeatherForecastController.cs">WeatherForecastController.cs</ProjectItem> | ||
</Folder> | ||
<Folder Name="Middleware" TargetFolderName="Middleware"> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="ExceptionMiddleware.cs">ExceptionMiddleware.cs</ProjectItem> | ||
</Folder> | ||
<Folder Name="deploy" TargetFolderName="deploy"> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="data.txt">data.txt</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deploy.tt">deploy.tt</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deploy.yaml">deploy.yaml</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deployDev.yaml">deployDev.yaml</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deployLocal.yaml">deployLocal.yaml</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deployLocalFromAcr.yaml">deployLocalFromAcr.yaml</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deployProd.yaml">deployProd.yaml</ProjectItem> | ||
</Folder> | ||
<Folder Name="T4Include" TargetFolderName="T4Include"> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="deploy.ttinclude">deploy.ttinclude</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net.ttinclude">log4net.ttinclude</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net2.ttinclude">log4net2.ttinclude</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="pipeline.ttinclude">pipeline.ttinclude</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="TemplateFileManager.CS.ttinclude">TemplateFileManager.CS.ttinclude</ProjectItem> | ||
</Folder> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="appsettings.Development.json">appsettings.Development.json</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="appsettings.json">appsettings.json</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="azure-pipelines.tt">azure-pipelines.tt</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="azure-pipelines.yml">azure-pipelines.yml</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="build">build</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="Dockerfile">Dockerfile</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="dockerLocal">dockerLocal</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net.Development.config">log4net.Development.config</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net.Production.config">log4net.Production.config</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net.tt">log4net.tt</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="log4net.config">log4net.config</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="NuGet.Config">NuGet.Config</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="Program.cs">Program.cs</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="Readme.md">Readme.md</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="Startup.cs">Startup.cs</ProjectItem> | ||
<ProjectItem ReplaceParameters="true" TargetFileName="WeatherForecast.cs">WeatherForecast.cs</ProjectItem> | ||
</Project> | ||
</TemplateContent> | ||
<WizardExtension> | ||
<Assembly>TemplateInstaller, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=6a3979b0e36e2e58</Assembly> | ||
<FullClassName>TemplateInstaller.WizardImplementation</FullClassName> | ||
</WizardExtension> | ||
</VSTemplate> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,31 +1,31 @@ | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<log4net> | ||
<!-- A1 is set to be a ConsoleAppender --> | ||
<appender name="A1" type="log4net.Appender.ConsoleAppender"> | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<log4net> | ||
<!-- A1 is set to be a ConsoleAppender --> | ||
<appender name="A1" type="log4net.Appender.ConsoleAppender"> | ||
|
||
<!-- A1 uses PatternLayout --> | ||
<layout type="log4net.Layout.PatternLayout"> | ||
<conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" /> | ||
</layout> | ||
</appender> | ||
<!-- A1 uses PatternLayout --> | ||
<layout type="log4net.Layout.PatternLayout"> | ||
<conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" /> | ||
</layout> | ||
</appender> | ||
|
||
<appender name="GelfUdpAppender" type="Gelf4Net.Appender.GelfUdpAppender, Gelf4Net.UdpAppender"> | ||
<appender name="GelfUdpAppender" type="Gelf4Net.Appender.GelfUdpAppender, Gelf4Net.UdpAppender"> | ||
|
||
<remoteAddress value="graylog.webuildgreatsoftware.co.za" /> | ||
<remoteAddress value="graylog.webuildgreatsoftware.co.za" /> | ||
|
||
<remotePort value="12202" /> | ||
<layout type="Gelf4Net.Layout.GelfLayout, Gelf4Net.UdpAppender"> | ||
<param name="AdditionalFields" value="app:GelfUdpAppender,version:1.0,Environment:Production,Level:%level,Service:$daprAppName$" /> | ||
<param name="Facility" value="RandomPhrases" /> | ||
<param name="IncludeLocationInformation" value="true" /> | ||
</layout> | ||
</appender> | ||
<remotePort value="12202" /> | ||
<layout type="Gelf4Net.Layout.GelfLayout, Gelf4Net.UdpAppender"> | ||
<param name="AdditionalFields" value="app:GelfUdpAppender,version:1.0,Environment:Production,Level:%level,Service:$daprAppName$" /> | ||
<param name="Facility" value="RandomPhrases" /> | ||
<param name="IncludeLocationInformation" value="true" /> | ||
</layout> | ||
</appender> | ||
|
||
<!-- Set root logger level to DEBUG and its only appender to A1 --> | ||
<root> | ||
<level value="ALL" /> | ||
<appender-ref ref="A1" /> | ||
<appender-ref ref="GelfUdpAppender" /> | ||
</root> | ||
</log4net> | ||
<!-- Set root logger level to DEBUG and its only appender to A1 --> | ||
<root> | ||
<level value="ALL" /> | ||
<appender-ref ref="A1" /> | ||
<appender-ref ref="GelfUdpAppender" /> | ||
</root> | ||
</log4net> | ||
|
Binary file modified
BIN
+1.17 KB
(100%)
MicroserviceTemplateInstallerVS2022/ProjectTemplates/DaprMicroserviceTemplate.zip
Binary file not shown.
2 changes: 1 addition & 1 deletion
2
MicroserviceTemplateInstallerVS2022/source.extension.vsixmanifest
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters