Dove dovrebbe essere il logger in una soluzione asp.net multiprogetto?

1

Ho una soluzione di Visual Studio con 4 progetti, che segue da vicino la struttura Nop-commerce. Quanto segue è la struttura della mia soluzione.

- Core
- Data
- Services
- Web

Il progetto Web è un'applicazione asp.net mvc. Ora voglio aggiungere la registrazione sul lato server alla mia soluzione, usando log4net. La mia domanda è quale progetto è il migliore candidato per avere il riferimento di log4net in esso, e perché? Per quanto riguarda ho studiato , il logger dovrebbe essere nel mio progetto Web . Ma cosa succede se volessi accedere da uno degli altri tre progetti?

    
posta Sнаđошƒаӽ 22.05.2017 - 12:48
fonte

3 risposte

3

Dovrai avere un riferimento alla tua libreria di logging (ad esempio log4net) in tutti i progetti che contengono qualsiasi codice che desideri registrare. In molti casi ciò significa che quasi tutti i progetti hanno un riferimento alla libreria di registrazione.

Inoltre, probabilmente avrai bisogno di un riferimento nel tuo progetto di "punto di ingresso" (ad esempio la tua app web) in modo da poter configurare i sink di log, ecc ...

potresti introdurre astrazioni per evitare di fare riferimento alla tua libreria di registrazione ovunque, ad es. aumentare eventi invece di logging o introdurre un'interfaccia di logging nel tuo progetto Core. In alcuni casi questo può valerne la pena (ad esempio, un progetto open source in cui gli utenti probabilmente avranno diverse librerie di registrazione), tuttavia nella maggior parte dei progetti questa è una cattiva idea e aggiunge semplicemente complessità per un piccolo guadagno nel mondo reale.

    
risposta data 22.05.2017 - 13:54
fonte
1

Normalmente, andrebbe a uno dei tuoi progetti principali (non avendo alcuna dipendenza da altri progetti). In modo che possa essere utilizzato da tutte le soluzioni.

La configurazione richiesta per Log4net viene salvata in web.config, ma la classe logger può trovarsi in qualsiasi altro progetto.

[aggiorna - per rispondere alle domande nel commento - beh, che sono per lo più risposte da @Justin] Generalmente, il logging è implementato come una classe astratta / interfaccia in cui tutti i metodi richiesti sono dichiarati come log, errore, warn etc. Quindi scrivi l'implementazione di questa interfaccia utilizzando una libreria di tua scelta, ad es. Log4Net

Devi aggiungere un riferimento a log4net (o qualsiasi altra libreria che hai scelto) nel tuo progetto.

Devi mantenerlo flessibile in modo da poter cambiare la libreria senza modificare il codice in qualsiasi altro punto della soluzione. per esempio. Per la registrazione di produzione si utilizza ApplicationInsight ma per dev locale si utilizza l'implementazione di log4net.

Potrebbe essere necessario un factory per ottenere il tipo corretto di logger in base al proprio ambiente / configurazione.

Tutte le configurazioni relative a Log4Net sono mantenute in web.config perché è il progetto di avvio. Inoltre, consente le proprietà configurabili per la libreria, ad esempio il livello di registro minimo.

HTH

    
risposta data 22.05.2017 - 13:16
fonte
0

Per come la vedo io, dipende dalla portata di ciò che vuoi registrare. Il logging più elementare (e quello che dovrebbe andare in produzione a mio avviso) includerebbe solo servizi e (forse) web.

Presumo che il nucleo e i dati non siano accessibili direttamente dall'utente: solo attraverso i servizi, che a loro volta sono accessibili dai servizi. Se è così, non è necessario registrare ogni piccolo passaggio di dati e core, quindi gestendo i servizi di accesso si conosce ciò che viene richiesto dall'utente e il risultato dell'operazione; dal momento che sia i dati che il core devono informare i servizi del risultato della richiesta.

A volte il logging può essere utile quando si esegue il debug, ma non penso che si voglia il sovraccarico del log dettagliato che scrive sulla produzione; Avrei una versione di debug che può essere attivata dalle impostazioni di configurazione o dalle direttive del preprocessore.

    
risposta data 22.05.2017 - 14:26
fonte

Leggi altre domande sui tag