What is ELMAH?
- ELMAH (Error Logging Modules and Handlers) is an application-wide error logging facility that is completely pluggable. It can be dynamically added to a running ASP.NET web application, or even all ASP.NET web applications on a machine, without any need for re-compilation or re-deployment.
- Once ELMAH has been dropped into a running web application and configured appropriately, you get the following facilities without changing a single line of your code:
- Logging of nearly all unhandled exceptions.
- A web page to remotely view the entire log of recoded exceptions.
- A web page to remotely view the full details of any one logged exception, including colored stack traces.
- In many cases, you can review the original yellow screen of death that ASP.NET generated for a given exception, even with customErrors mode turned off.
- An e-mail notification of each error at the time it occurs.
- An RSS feed of the last 15 errors from the log.
How to Install ELMAH on your MVC Project?
- Open Nuget Package Manager on the MVC Project
- Search for ELMAH and Install it.
- Then configure it.
ELMAH Configuration
- It will already add some configuration under your web.config but we need to include some configuration so that it will point to a database.
-
<connectionStrings>
<add name=”elmahConnectionString” connectionString=”Data Source=Server;Initial Catalog=ELMAH_DEV;uid=user;pwd=user;Pooling=true;Min Pool Size=0;Max Pool Size=999;” providerName=”System.Data.SqlClient” />
</connectionStrings>
-
<elmah>
<!–
See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for
more information on remote access and securing ELMAH.
–>
<security allowRemoteAccess=”true” />
<errorLog type=”Elmah.SqlErrorLog, Elmah” applicationName=”NameOfApplication_DEV” connectionStringName=”elmahConnectionString” />
</elmah>
- We also need to remove some sections that we don’t need specially the section below that automatically create a page for the logs.
-
<location path=”elmah.axd” inheritInChildApplications=”false”>…</location>
Logging
- All uncatched exception will automatically be recorded.
- All exception handling will NOT be recorded automatically. It needs to be manually logged by including the Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
try{
throw new Exception(“Some Exception”);
}catch(Exception ex){Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
}