Gran parte di questo dipende dalla tecnologia e dalla soluzione, ma ho usato diversi strumenti che sicuramente non la penso in questo modo.
Se stai facendo web usando qualcosa con un modello di eventi, un concetto di un ciclo di vita di richiesta / risposta puoi facilmente fare tutto il tuo logging agganciando l'evento di eccezione e agganciando l'evento di risposta completato, mantenendo solo una collezione di cose loggabili attraverso il ciclo di vita.
Se stai facendo un'app desktop, le cose diventano un po 'più varie. Di solito ci sono ancora alcuni eventi comuni da agganciare, ma altre volte è necessario chiamare esplicitamente il logger perché il salvataggio di tutto alla fine del ciclo di vita si disfarebbe rapidamente.
In .Net è possibile risolvere molto implementando un listener di traccia personalizzato, in questo modo è possibile utilizzare il riferimento di traccia predefinito, ma ottenere comunque dati che non sembrano terribili durante la revisione.
Per quanto riguarda l'accesso a un db separato o no, dipende da molte cose, ad esempio se il log deve essere un'origine di verifica valida e chi può accedere ai dati e se si sta tentando di registrare i problemi di connessione a database: -)
Se ho bisogno di cercare il log in modo efficiente non immagazzino i messaggi come grandi blob, ma a volte creo i messaggi come un blob e li divido nel formato finale in un processo separato. Quello che fai per ottenere il messaggio in primo luogo dipenderà interamente da ciò che stai facendo. Ho alcune app in cui il sovraccarico di serializzazione degli oggetti è semplicemente eccessivo per il logging in corso, per non avere un impatto perfetto, per non parlare del fatto che avrei esaurito lo spazio di archiviazione in poche ore. La maggior parte di quelli registro solo le stringhe ID. Altre app hanno oggetti che desidero registrare come oggetti serializzati, ma l'oggetto non è serializzabile, per quelli è possibile utilizzare un formattatore personalizzato o un intermedio. Altre volte ho il lusso di oggetti a bassa velocità e serializzabili, quindi uso solo i serializzatori di default.
Un po 'di consigli, se hai intenzione di rendere sicuro il logging infinitamente estensibile hai un modo per limitarlo / ridurlo