Email: Password:       Forgot Password 
    .netCodeSG
A Saarsha Group Online Community for dot net codes group like C#, Asp.NET, VB.NET, Sharepoint, JavaScript, JQuery, Ajax, SQL, WCF, WPF.
 
TECHNOLOGIES:
 

Logging Exception in Database Using CustomFilter Exception

Article:
Viewed:  392 
Posted On:  30/03/2018 13:26:39 
How we can do logging in Database Using CustomFilter Exception in ASP.NET MVC 

As per the request from one of my followers, I am writing this article which will explain how we can handle errors in an MVC application.

In this article, I am also going to explain how we can log our exception message in our Database.

Below is my Database Table where all the errors will be logged,

1.png

Script of this table is given below.

  1. CREATE TABLE [dbo].[ErrorLogger](  
  2.     [Error_ID] [int] IDENTITY(1,1) NOT NULL,  
  3.     [Error_Message] [text] NULL,  
  4.     [Error_Message_Detail] [text] NULL,  
  5.     [Controller_Name] [varchar](50) NULL,  
  6.     [Error_Logged_Date] [datetime] NULL,  
  7.  CONSTRAINT [PK_ErrorLogger] PRIMARY KEY CLUSTERED   
  8. (  
  9.     [Error_ID] ASC  
  10. )WITH (PAD_INDEX  = OFF,  
  11.  STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,   
  12. ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]  
  13. ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]  
  14.   
  15. GO  
  16.   
  17. SET ANSI_PADDING OFF  
  18. GO  
  19.   
  20. ALTER TABLE [dbo].[ErrorLogger] ADD  CONSTRAINT [DF_ErrorLogger_Error_Logged_Date]    
  21. DEFAULT (getdate()) FOR [Error_Logged_Date]  
  22. GO  

Now, open Visual Studio and go to File -> New Project.

2.jpg

3.jpg

Now right click on Models => Add New Item=> ADO.NET Entity Data Model. Follow the process given in the pictures.

4.jpg

5.png

6.png

7.png

8.png

9.jpg

Now, in your Solution, add a new folder named CustomFilter. Here, in this CustomFilter folder, add a new class => ExceptionHandlerAttribute.cs.

10.jpg

Here, in this class, add the below code.

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.Mvc;  
  6. using LoggedExceptionInDB.Models;  
  7.   
  8. namespace LoggedExceptionInDB.CustomFilter  
  9. {  
  10.     public class ExceptionHandlerAttribute: FilterAttribute, IExceptionFilter  
  11.     {  
  12.         public void OnException(ExceptionContext filterContext)  
  13.         {  
  14.             if (!filterContext.ExceptionHandled)  
  15.             {  
  16.                 ErrorLogger logger = new ErrorLogger()  
  17.                 {  
  18.                     Error_Message = filterContext.Exception.Message,  
  19.                     Error_Message_Detail = filterContext.Exception.StackTrace,  
  20.                     Controller_Name = filterContext.RouteData.Values["controller"].ToString(),  
  21.                     Error_Logged_Date = DateTime.Now  
  22.                 };  
  23.   
  24.                 RCompanyEntities ctx = new RCompanyEntities();  
  25.                 ctx.ErrorLogger.Add(logger);  
  26.                 ctx.SaveChanges();  
  27.                 filterContext.ExceptionHandled = true;  
  28.             }  
  29.         }  
  30.     }  
  31. }  

11.jpg

Now, in App_Start, add a new class as FilterConfig. Add the below code.

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using LoggedExceptionInDB.CustomFilter;  
  6. using System.Web.Mvc;  
  7.   
  8. namespace LoggedExceptionInDB.App_Start  
  9. {  
  10.     public class FilterConfig  
  11.     {  
  12.         public static void RegisterGlobalFilters(GlobalFilterCollection filters)  
  13.         {  
  14.             filters.Add(new ExceptionHandlerAttribute());  
  15.         }  
  16.     }  
  17. }  

12.jpg

In Global.asax, write the below line of code.

  1. protected void Application_Start()  
  2.         {  
  3.             AreaRegistration.RegisterAllAreas();  
  4.             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);  
  5.             RouteConfig.RegisterRoutes(RouteTable.Routes);  
  6.         }  

13.jpg

Now, add a new Controller.

14.jpg

15.png

Here, on Company Controller, I am going to add a Method to insert a new record like below.

Here, in the above created method I am using [ExceptionHandler] which will be responsible to log the error in the database.

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.Mvc;  
  6. using LoggedExceptionInDB.Models;  
  7. using LoggedExceptionInDB.CustomFilter;  
  8.   
  9. namespace LoggedExceptionInDB.Controllers  
  10. {  
  11.     public class CompanyController : Controller  
  12.     {  
  13.         RCompanyEntities ctx = new RCompanyEntities();  
  14.   
  15.         // GET: Company  
  16.         public ActionResult Index()  
  17.         {  
  18.             return View();  
  19.         }  
  20.   
  21.         public ActionResult Create()  
  22.         {  
  23.             return View();  
  24.         }  
  25.   
  26.         [ExceptionHandler]  
  27.         [HttpPost]  
  28.         public ActionResult Create(Company cmp)  
  29.         {  
  30.             int value;  
  31.             if (cmp.Country != "India")  
  32.             {  
  33.                 throw new Exception("Add only Indian Company");  
  34.             }  
  35.             else if (!int.TryParse(cmp.ZipCode, out value))  
  36.             {  
  37.                 throw new Exception("Zip Code only in Number");  
  38.             }  
  39.             else  
  40.             {  
  41.                 //Logic To Add your Record.  
  42.   
  43.             }  
  44.             return View(cmp);  
  45.         }  
  46.     }  
  47. }  

16.png

  1. @model LoggedExceptionInDB.Models.Company  
  2.   
  3. @{  
  4.     ViewBag.Title = "Create";  
  5. }  
  6.   
  7. <h2>Create</h2>  
  8.   
  9. @using (Html.BeginForm())   
  10. {  
  11.     @Html.AntiForgeryToken()  
  12.       
  13.     <div class="form-horizontal">  
  14.         <h4>Company</h4>  
  15.         <hr />  
  16.         @Html.ValidationSummary(true""new { @class = "text-danger" })  
  17.         <div class="form-group">  
  18.             @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })  
  19.             <div class="col-md-10">  
  20.                 @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })  
  21.                 @Html.ValidationMessageFor(model => model.Name, ""new { @class = "text-danger" })  
  22.             </div>  
  23.         </div>  
  24.   
  25.         <div class="form-group">  
  26.             @Html.LabelFor(model => model.City, htmlAttributes: new { @class = "control-label col-md-2" })  
  27.             <div class="col-md-10">  
  28.                 @Html.EditorFor(model => model.City, new { htmlAttributes = new { @class = "form-control" } })  
  29.                 @Html.ValidationMessageFor(model => model.City, ""new { @class = "text-danger" })  
  30.             </div>  
  31.         </div>  
  32.   
  33.         <div class="form-group">  
  34.             @Html.LabelFor(model => model.Country, htmlAttributes: new { @class = "control-label col-md-2" })  
  35.             <div class="col-md-10">  
  36.                 @Html.EditorFor(model => model.Country, new { htmlAttributes = new { @class = "form-control" } })  
  37.                 @Html.ValidationMessageFor(model => model.Country, ""new { @class = "text-danger" })  
  38.             </div>  
  39.         </div>  
  40.   
  41.         <div class="form-group">  
  42.             @Html.LabelFor(model => model.ZipCode, htmlAttributes: new { @class = "control-label col-md-2" })  
  43.             <div class="col-md-10">  
  44.                 @Html.EditorFor(model => model.ZipCode, new { htmlAttributes = new { @class = "form-control" } })  
  45.                 @Html.ValidationMessageFor(model => model.ZipCode, ""new { @class = "text-danger" })  
  46.             </div>  
  47.         </div>  
  48.   
  49.         <div class="form-group">  
  50.             <div class="col-md-offset-2 col-md-10">  
  51.                 <input type="submit" value="Add New Company" class="btn btn-default" />  
  52.             </div>  
  53.         </div>  
  54.     </div>  
  55. }  
  56.   
  57. <div>  
  58.     @Html.ActionLink("Back to List""Index")  
  59. </div>  

Inside Models folder, I have added a class named Company.

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5.   
  6. namespace LoggedExceptionInDB.Models  
  7. {  
  8.     public class Company  
  9.     {           
  10.         public string Name { get; set; }   
  11.         public string City { get; set; }  
  12.         public string Country { get; set; }  
  13.         public string ZipCode { get; set; }  
  14.     }  
  15. }  

Now, run your application. 

If I enter any string value inside ZipCode, then an exception is thrown.

17.png

18.jpg

Now, check your database table.

19.jpg

  Comment:
         HOME   |   Submit Article   |   Contact Us   |   About Us   |   Terms & Condition   |   Advertise With us