Exception Logging In MVC Using Elmah
Install Elmah Package from Nuget.
Now open web config file and add the following code inside <system.web> </system.web>.
<!--add this--> < httpHandlers > < add verb = "POST,GET,HEAD"path = "elmah.axd"type = "Elmah.ErrorLogPageFactory, Elmah" / > < /httpHandlers> <!--add this-->
Also, add the following code inside <system.webServer></system.webServer>.
<!--add this--> < handlers > < add name = "Elmah"verb = "POST,GET,HEAD"path = "elmah.axd"type = "Elmah.ErrorLogPageFactory, Elmah" / > < /handlers> <!--add this-->
Create ELMAH_Error table.
CREATE TABLE[dbo].[ELMAH_Error] ( [ErrorId][uniqueidentifier] NOT NULL, [Application][nvarchar](60) NOT NULL, [Host][nvarchar](50) NOT NULL, [Type][nvarchar](100) NOT NULL, [Source][nvarchar](60) NOT NULL, [Message][nvarchar](500) NOT NULL, [User][nvarchar](50) NOT NULL, [StatusCode][int] NOT NULL, [TimeUtc][datetime] NOT NULL, [Sequence][int] IDENTITY(1, 1) NOT NULL, [AllXml][ntext] NOT NULL )
Create stored procedures.
ELMAH_GetErrorsXml
Create PROCEDURE[dbo].[ELMAH_GetErrorsXml] ( @Application NVARCHAR(60), @PageIndex INT = 0, @PageSize INT = 15, @TotalCount INT OUTPUT ) AS SET NOCOUNT ON DECLARE @FirstTimeUTC DATETIME DECLARE @FirstSequence INT DECLARE @StartRow INT DECLARE @StartRowIndex INT SELECT @TotalCount = COUNT(1) FROM [ELMAH_Error] WHERE [Application] = @Application SET @StartRowIndex = @PageIndex * @PageSize + 1 IF @StartRowIndex <= @TotalCount BEGIN SET ROWCOUNT @StartRowIndex SELECT @FirstTimeUTC = [TimeUtc], @FirstSequence = [Sequence] FROM [ELMAH_Error] WHERE [Application] = @Application ORDER BY [TimeUtc] DESC, [Sequence] DESC END ELSE BEGIN SET @PageSize = 0 END SET ROWCOUNT @PageSize SELECT errorId = [ErrorId], application = [Application], host = [Host], type = [Type], source = [Source], message = [Message], [user] = [User], statusCode = [StatusCode], time = CONVERT(VARCHAR(50), [TimeUtc], 126) + 'Z' FROM [ELMAH_Error] error WHERE [Application] = @Application AND [TimeUtc] <= @FirstTimeUTC AND [Sequence] <= @FirstSequence ORDER BY [TimeUtc] DESC, [Sequence] DESC FOR XML AUTO
ELMAH_GetErrorXml
Create PROCEDURE[dbo].[ELMAH_GetErrorXml] ( @Application NVARCHAR(60), @ErrorId UNIQUEIDENTIFIER ) AS SET NOCOUNT ON SELECT [AllXml] FROM [ELMAH_Error] WHERE [ErrorId] = @ErrorId AND [Application] = @Application
ELMAH_LogError
Create PROCEDURE[dbo].[ELMAH_LogError] ( @ErrorId UNIQUEIDENTIFIER, @Application NVARCHAR(60), @Host NVARCHAR(30), @Type NVARCHAR(100), @Source NVARCHAR(60), @Message NVARCHAR(500), @User NVARCHAR(50), @AllXml NTEXT, @StatusCode INT, @TimeUtc DATETIME ) AS SET NOCOUNT ON INSERT INTO [ELMAH_Error] ( [ErrorId], [Application], [Host], [Type], [Source], [Message], [User], [AllXml], [StatusCode], [TimeUtc] ) VALUES ( @ErrorId, @Application, @Host, @Type, @Source, @Message, @User, @AllXml, @StatusCode, @TimeUtc )
Now again open web config file, add the following code inside in <configuration>.
</configuration> <elmah> <!--. If allowRemoteAccess value is set to 0, then the error log web page can only be viewed locally. If allowRemoteAccess attribute is set to 1 then the error log web page is enabled for both remote and local visitors.--> <!--add this--> <security allowRemoteAccess="0" /> <!-- DefaultConnection is the name of database connection string --> <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="DefaultConnection" /> <!--add this--> </elmah>
Note: You can view the error log web page through the url localhost:portno/elmah.axd like, localhost:55776/elmah.axd.