pagina di registrazione / ID sessione in un modulo interno

1

Abbiamo un modulo ORM C # che genera query. Registra le query generate e altre informazioni nel file di errore / traccia. È usato dalla nostra applicazione web. La maggior parte delle nostre query sono generate dinamicamente (in base a regole aziendali dinamiche e interazioni dell'utente) su cui abbiamo un controllo limitato.

Ovviamente il modulo ORM è completamente disaccoppiato dall'applicazione web, e quindi completamente inconsapevole di sessioni Web, colpi di pagine ecc. Lo svantaggio è che le voci di registro che genera non possono essere ricondotte al colpo di pagina originale. Quando notiamo una query non performante nel log, non possiamo facilmente determinare quale hit della pagina genera quella query.

Come posso mantenere il modulo ORM disaccoppiato dall'applicazione web, ma permetto comunque di registrare sufficienti informazioni rilevanti per me per correlare ogni voce del registro a un hit di sessione / pagina?

(So che possiamo passare l'oggetto logger e l'oggetto logger può conservare le informazioni sulla sessione.Tuttavia, alcune di queste chiamate di funzione sono nidificate a 10 livelli in profondità, quindi passare il logger è complicato).

    
posta jackbean818 20.03.2014 - 16:29
fonte

2 risposte

2

È possibile utilizzare un contesto diagnostico nidificato (NDC) per inserire le informazioni prima di accedere al modulo ORM (oa qualsiasi livello sia appropriato).

Questa idea è indicata nella documentazione di log4net come Stack di contesto ma la maggior parte dei logger avere un concetto simile.

    
risposta data 20.03.2014 - 19:04
fonte
0

Rendi disponibile il logger globalmente, quindi non devi passarlo. Se hai più di un logger (forse uno per sessione), devi farlo "globalmente nel contesto della sessione". Ad esempio, è possibile fornire un "repository di logger" globale che contiene un riferimento a ciascun registratore attivo e consente di accedervi tramite l'id di sessione o un altro id di contesto. L'unica cosa di cui hai bisogno qui è una sorta di ID che è disponibile attraverso tutti i livelli della tua applicazione. È difficile darti un consiglio più specifico senza sapere di più sul tuo codice.

    
risposta data 20.03.2014 - 16:45
fonte

Leggi altre domande sui tag