In this article, I'll explain about the Global exception filter and discuss about the way to handle exception globally in whole project without using try catch .And also explaining how to use log4net to create a log file on your local machine .
In ASP.NET MVC applications, Exception handling taking care of is done generally in two ways: at simple level use try catch block in the code. ASP.NET MVC comes with some inbuilt features like as Exception Filter The HandleError is the default worked in Exception Filter. Sadly, the HandleError filter doesn't gives a complete response to the exception handling globally of issue and that makes us to at present depend on the Application_Error Event.
Some related links which may help to learn basic and advanced concepts related to this.
- Exception handling in asp.net application
- MVC in details.
- Web Api explanation
- Error Logging
- Web Api testing
Today we will learn these topics which are given below listed..
- How to use Exception filter?
- How to configure Log4Net in webapi 2?
- How to create Global Exception filter?
- How to avoid to use try catch in application?
- How to create log file with log details in drive.
- Advantage of Exception filter.
To learn these topics you should follow steps which are given below.
Step 1:- Create a web based application in MVC or web Api.see image......
According your thinking you can type your project name ,i have given "swaggerTsting".,Click on "OK".
Thereafter next window will be open ans select "MVC" OR "WebApi" otherwise both.and click on ok.
After that you can see you project in solution explorer.see image.
In this you can see some apicontroller already created with demo output.you can create any number of controller and action.
If i'll run this application now so this application will be run correctly .
Now i am going to integrate Exception filter with log4net.so follow some steps....
Step 2:- Firstly add log4net in your solution using nuget package or PM console.
Just i am going to add log4net by PM console. see image...
According this image you can also add log4net,Thereafter click on "Package manager console " you will see new window on the bottom of editor.see image
Just type "Install-package log4net" or copy paste .
PM> Install-Package log4net
In this image you can see log4net will added and showing message in bottom pane.
Step 3:-After that create a folder in your application "ExLogger" its not mandatory but best way create a folder to put all file related to exception.
And create two file inside "ExLogger" folder
- log4net.config
- ExceptionManagerApi.cs
Step 4:-Write custom code inside log4net.config file to set log path,log format,log type etc....
Log4net:- Copy this code and paste in your log4net.config file.
- <log4net>
- <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
- <!--
- The file location can be anywhere as long as the running application has read/write/delete access.
- The environment variable also can be set as the location.
- <file value="${TMP}\\Log4NetTest.log"/>
- -->
- <file type="log" value="D:\Logger.log"/>
- <appendToFile value="true"/>
- <rollingStyle value="Size" />
- <maxSizeRollBackups value="5" />
- <maximumFileSize value="5MB" />
- <!--Ensure the file name is unchanged-->
- <staticLogFileName value="true" />
- <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
- <layout type="log4net.Layout.PatternLayout">
- <header value="Logging Start
- " />
- <footer value="Logging End
- " />
- <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
- </layout>
- <!--<layout type="log4net.Layout.PatternLayout">
- <header value="[Header]
- " />
- <footer value="[Footer]
- " />
- <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
- </layout>-->
- </appender>
- <root>
- <!--
- 1.OFF - nothing gets logged
- 2.FATAL
- 3.ERROR
- 4.WARN
- 5.INFO
- 6.DEBUG
- 7.ALL - everything gets logged
- -->
- <level value="ALL"/>
- <appender-ref ref="RollingFile"/>
- </root>
- </log4net>
In this code you can change log format and destination path to save log details.
Step 5:-Now go to configure Exception filter logic in "ExceptionManagerApi.cs",copy and paste this code and in your "ExceptionManagerApi.cs" file.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Web.Mvc;
- using log4net;
- using System.IO;
- using System.Reflection;
- using System.Web.Http.ExceptionHandling;
- namespace CrxApi.ExLogger
- {
- public class ExceptionManagerApi : ExceptionLogger
- {
- ILog _logger = null;
- public ExceptionManagerApi()
- {
- // Gets directory path of the calling application
- // RelativeSearchPath is null if the executing assembly i.e. calling assembly is a
- // stand alone exe file (Console, WinForm, etc).
- // RelativeSearchPath is not null if the calling assembly is a web hosted application i.e. a web site
- var log4NetConfigDirectory = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
- //var log4NetConfigFilePath = Path.Combine(log4NetConfigDirectory, "log4net.config");
- var log4NetConfigFilePath = "c:\\users\\user\\documents\\visual studio 2012\\Projects\\ErrorLogingDummy\\ErrorLogingDummy\\ExLogger\\log4net.config";
- log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(log4NetConfigFilePath));
- }
- public override void Log(ExceptionLoggerContext context)
- {
- _logger = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- _logger.Error(context.Exception.ToString() + Environment.NewLine);
- //_logger.Error(Environment.NewLine +" Excetion Time: " + System.DateTime.Now + Environment.NewLine
- // + " Exception Message: " + context.Exception.Message.ToString() + Environment.NewLine
- // + " Exception File Path: " + context.ExceptionContext.ControllerContext.Controller.ToString() + "/" + context.ExceptionContext.ControllerContext.RouteData.Values["action"] + Environment.NewLine);
- }
- public void Log(string ex)
- {
- _logger = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- _logger.Error(ex);
- //_logger.Error(Environment.NewLine +" Excetion Time: " + System.DateTime.Now + Environment.NewLine
- // + " Exception Message: " + context.Exception.Message.ToString() + Environment.NewLine
- // + " Exception File Path: " + context.ExceptionContext.ControllerContext.Controller.ToString() + "/" + context.ExceptionContext.ControllerContext.RouteData.Values["action"] + Environment.NewLine);
- }
- }
- }
In this i have configure my system path to set log4net setting ,you should change path according your application.
- var log4NetConfigFilePath = "c:\\users\\user\\documents\\visual studio 2012\\Projects\\ErrorLogingDummy\\ErrorLogingDummy\\ExLogger\\log4net.config";
Step 6:-Now we need to configure "ExceptionManagerApi" class inside "WebApiConfig.cs" in app_start folder.
to make global we have to configure inside "WebApiConfig.cs". use this code inside "WebApiConfig.cs" and save.
- //Register Exception Handler
- config.Services.Add(typeof(IExceptionLogger), new ExceptionManagerApi());
Step 7:-If your application is now running good so to testing purpose throw any default exception and check.
see image.
According this image i am throwing exception forcely .after that consume this api using postman or any other client .this action will be thorw exception and create and new log file in your system.
Step 8:- Run your application and use if any exception occurs anywhere ,any layer (BAL,DAL,....) exception wiil be manage by exception filter and create a new log file in your system by log4net.
No need to use other extra configuration to manage exception in your application.
Advantage of Exception Filter and Log4net.
- No need to use any complicated configuration.
- It will be manage global exception in your application.
- No need to use try catch block .
- You can check log details from log file which is created by log4net
- We can find exact error on production server if exception will occur.
- Easy to impliment in web api2.
- No need to manage exception on each layer ,because its for whole solution.
- Easy to maintenance .
You have just read an article that categorized by title MVC /
WEB API
by title Global Exception Filter,Exception handling and logging using Log4Net in Web Api 2. You can bookmark this page with a URL https://bikeshsrivastava.blogspot.com/2016/09/global-exception-filterexception.html. Thank You!
Author:
Bikesh Srivastava - Sunday, September 18, 2016
There are currently no comments for "Global Exception Filter,Exception handling and logging using Log4Net in Web Api 2"
Post a Comment