Mi sembra che il tuo approccio sia buono, in linea con quanto mi è capitato di vedere in diversi gestionali.
Ovviamente ti sconsiglio di "cablare" stringhe e messaggi nel software (spesso il messaggio da inserire lo richiede esplicitamente il tuo utente), mentre invece ti consiglio di far viaggiare codici d'errore che poi si vanno a decodificare in una (o più) tabella centralizzata.
E' buona norma (magari in previsione di una maggiore scalabilità e portabilità su differenti contesti/clienti che usufruiscano del tuo software) prevedere uno "scope" del tuo errore, al fine di poter customizzare gravità e messaggi d'errore a seconda che l'errore sia sollevato da una particolare mappa o funzionalità o servizio.
Censire gli errori avvenuti in tabella è buona norma, soprattutto in un contesto batch.
In un contesto on-line è bene poter pilotare tale censimento tramite degli "interruttori" (properties o configurazioni sulla base dati), in modo che tu possa spegnerlo nel caso impatti sulle performance e lasciare al solo log su server il compito di riportare il problema.