Just to extend on Max Vermon's comment...
INSERT
failures should be monitored at the data access layer.
An exception is raised by SQL with information regarding the error for failed INSERTs
. If you are accessing data through a Stored Procedure (SP) you can handle the error with the SP using the BEGIN TRY...END TRY...BEGIN CATCH...END CATCH
exception handling blocks.
You can easily write code to store the exception information into a generic table.
You can use exception handling in other programming environments such as C#, VB.NET etc...
Here is a good example of handling exceptions in T-SQL: http://www.codeproject.com/Articles/38211/Exception-Handling-in-SQL-Server