Stored Procedure Error Logging

Stored Procedure Error Logging
Create table to capture Errors
Create Stored Procedure to Log Error
Invoke Stored Procedure in TRY/CATCH Block

USE TEMPDB;
GO
IF OBJECT_ID('APM.ErrorLog') IS NOT NULL
    DROP TABLE APM.ErrorLog;
GO


CREATE TABLE APM.ErrorLog
(
    ErrorLogID INT IDENTITY(1, 1) PRIMARY KEY,
    DatabaseID INT,
    DatabaseName sysname,
    SPID INT,
    ErrorNumber INT,
    ErrorSeverity INT,
    ErrorState INT,
    ErrorProcedure VARCHAR(400),
    ErrorMessage NVARCHAR(MAX),
    AdditionalInfo NVARCHAR(MAX),
    CreatedBY VARCHAR(50)
        DEFAULT SYSTEM_USER,
    CreatedDateTime DATETIME
        DEFAULT GETUTCDATE(),
    Status INT
        DEFAULT 1
);
GO

CREATE OR ALTER PROC APM.LogErrorInfo
(
    @pAdditionalIndfo NVARCHAR(550) = NULL,
    @pCreatedBy VARCHAR(50) = NULL
)
AS
BEGIN
    INSERT INTO APM.ErrorLog
    (
        DatabaseID,
        DatabaseName,
        SPID,
        ErrorNumber,
        ErrorSeverity,
        ErrorState,
        ErrorProcedure,
        ErrorMessage,
        AdditionalInfo,
        CreatedBY
    )
    SELECT DB_ID(),                       -- DatabaseID - int
           DB_NAME(),                     -- DatabaseName - sysname
           @@SPID,                        -- SPID - int
           ERROR_LINE(),                  -- ErrorNumber - int
           ERROR_SEVERITY(),              -- ErrorSeverity - int
           ERROR_STATE(),                 -- ErrorState - int
           ERROR_PROCEDURE(),             -- ErrorProcedure - varchar(400)
           ERROR_MESSAGE(),               -- ErrorMessage - nvarchar(max)
           ISNULL(@pAdditionalIndfo, ''), -- AdditionalInfo - nvarchar(max)
           ISNULL(@pCreatedBy, SYSTEM_USER);

    SELECT DB_ID(),                       -- DatabaseID - int
           DB_NAME(),                     -- DatabaseName - sysname
           @@SPID,                        -- SPID - int
           ERROR_LINE(),                  -- ErrorNumber - int
           ERROR_SEVERITY(),              -- ErrorSeverity - int
           ERROR_STATE(),                 -- ErrorState - int
           ERROR_PROCEDURE(),             -- ErrorProcedure - varchar(400)
           ERROR_MESSAGE(),               -- ErrorMessage - nvarchar(max)
           ISNULL(@pAdditionalIndfo, ''), -- AdditionalInfo - nvarchar(max)
           ISNULL(@pCreatedBy, SYSTEM_USER);

/*
 -- UNIT TEST
 BEGIN TRY
SELECT 1 /0
END TRY
BEGIN CATCH
EXEC APM.LogErrorInfo @pAdditionalIndfo ='Unit Test'
END CATCH

SELECT * FROM APM.ErrorLog
*/

END;

 

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *