2011-01-12 19 views
27

Sto cercando di passare a una nuova soluzione di registrazione unificata da utilizzare nella nostra nuova linea di prodotti e volevo vedere cosa pensavano alcune persone su Stack Overflow. Avremo bisogno di registrazione per una varietà di applicazioni: ASP .net, servizi Windows, servizi web, app wpf ecc. Siamo solo un negozio di windows.Registrazione C#. Cosa dovrei usare?

Alcuni dei nostri requisiti per una soluzione di registrazione includono:

1) Accedere gestione dei file

- Ability to split files up over a certain size 
- Ability to auto archive/delete after certain period of time 

2) Possibilità di inviare messaggi di posta elettronica su alcuni tipi di messaggi registrati (errori, per esempio)

3) Possibilità di scrivere messaggi nel registro eventi di Windows

- We need to be able to specify where it's being written in the event log. 
    It would also be nice if it would automatically create the event log source if it does exist. 

Ho iniziato a cercare nLog, windows trace e log4net. Non sono limitato a questi 3, solo alcuni sono emersi molto durante la ricerca.

+1

log4net è di gran lunga il più utilizzato e supporta tutti questi requisiti. È quello che userei, ma YMMV. – Thorarin

+5

Prova questo: http://stackoverflow.com/search?q=[.net]+logging Troverete molte risposte interessanti. –

+0

Duplicato, ma Cole W ha avanzato alcuni requisiti specifici a cui pensava, il che è bello riguardo a questa domanda. – Marijn

risposta

17

log4net è sempre una buona scelta.

http://logging.apache.org/log4net/

+3

No, non è una buona scelta se vuoi qualcosa di facile da implementare. Certo, se sei già un utente di log4net, potrebbe essere facile per te. Per chi non l'ha mai usato prima, metterlo su è un rompicoglioni. – Pedro

+1

Meno di un rompicapo che scrivere il proprio schema di registrazione, mi pare! – RichardOD

+1

@Pedro cosa stai * implementando *? Puoi trovare esempi app.config su come configurare il logger. –

3

È possibile dare un'occhiata a Enterprise Library, hanno un blocco applicativo per la registrazione che è estendibile

http://entlib.codeplex.com/

http://entlib.codeplex.com/releases/view/46741

è possibile scaricare il pdf guida dev, hanno una sezione su logging (Capitolo 4)

+0

+1 Stavo ottenendo il collegamento :) –

+1

abbiamo avuto * molto * brutte esperienze con quello - sui server Web, ha registrato e bloccato il file (cioè, non lo ha rilasciato in tempo per un altro registro), quindi il prossimo log è andato ad altro file che aveva GUID come nome ... molto poco pratico per qualsiasi ambiente di produzione ... – veljkoz

+1

Sembra che stavi cercando di accedere allo stesso file da più processi (o usando più 'TraceListeners' quel punto allo stesso file). Vedi: http://stackoverflow.com/questions/1728571/logging-from-multiple-processes-to-same-file-using-enterprise-library-4-1. Ho usato Enterprise Library negli ambienti di produzione aziendale da quando è stato rilasciato e ho avuto esperienze molto positive. –

9

E solo un altro uno: NLog.

  • Files - il file singoli o multipli, con denominazione automatica dei file e l'archiviazione
  • Registro eventi - Database locale o remoto - negozio vostro log in database supportati
  • da .NET Network - utilizzando il protocollo TCP , UDP, SOAP, protocolli MSMQ
  • console della riga di comando - tra cui codifica a colori dei messaggi
  • E-mail - è possibile ricevere email ogni volta che si verificano gli errori di applicazione
  • traccia ASP.NET
  • e molti altri
+0

Ho usato NLog nel mio precedente progetto e ho trovato molto più semplice da configurare rispetto a Log4Net (che non funzionerebbe, inspiegabilmente). – Shimrod

11

Usa .NET common logging. È possibile scegliere successivamente un fornitore specifico (NLog, CLog, log4net ...) o persino crearne di personalizzati.

+4

Ma cosa succede se voglio evitare una dipendenza dal logging comune di .NET? Onestamente, questo mi sembra un inutile strato di astrazione per me. log4net e al sono astrazioni stesse sulla registrazione - quale possibile ragione potrei avere per volere scambiarne una con un'altra che non è anche un argomento contro l'uso della registrazione comune di .NET? –

+7

Questo è simile al log di apache per Java, e lo stesso argomento vale per la sua esistenza. Diciamo che stai scrivendo librerie che verranno utilizzate in altri codici. Non si desidera stabilire quale framework di registrazione viene utilizzato in alcun codice che interagisce con la libreria, poiché ciò significa che il client deve avere configurazione per il proprio framework specifico. Diciamo che se si decide di utilizzare log4net, un'altra libreria utilizza NLog, quindi il client deve avere entrambe le configurazioni presenti per utilizzare entrambe le librerie. Commons consente di ereditare il framework di registrazione dal codice client. – Ceilingfish

0

È possibile creare la propria lib di registrazione ... l'ho fatto.

Date un'occhiata a PostSharp http://www.sharpcrafters.com/ hanno ottimi esempi di alcuni sistemi di registrazione di base.

1

Vedere questa domanda per un'altra risposta esauriente: When should I use Tracing vs Logger.NET, Enterprise Library, log4net or Ukadc.Diagnostics?

In breve, i principali quadri di registrazione disponibili sono il built-in .NET Framework System.Diagnostics, log4net, NLog e Enterprise Library Logging Application Block.

Un confronto di questi quadri principali è disponibile all'indirizzo: https://essentialdiagnostics.codeplex.com/wikipage?title=Comparison

1) Accedere gestione dei file

Tutti i principali quadri di cui sopra il supporto dei file a rotazione, ma penso che lasciano la pulizia a voi .

ad es. in passato ho utilizzato un lavoro programmato di Windows che utilizza robocopy con "/ mov/minage X" per spostare altrove i vecchi file, quindi eliminare o qualsiasi altra cosa.

EventSchemaTraceListener utilizzato in System.Diagnostics, che I blogged about recently, ha un'opzione LimitedCircularFiles, ma non molto supporto degli strumenti per la visualizzazione dei registri (sono in XML).

2) Possibilità di inviare messaggi di posta elettronica su certi tipi di messaggi registrati (errori, per esempio)

Tutti i principali quadri di cui sopra il supporto presente direttamente o tramite le estensioni (ascoltatori supplementari).

3) Capacità di scrivere messaggi al registro eventi di Windows

Anche in questo caso, tutti i quadri principali supportano questo, però io in genere sento di raccomandare che la scrittura nel registro eventi di Windows dovrebbe essere fatto direttamente e non via traccia.

Uno dei problemi è ciò che è stato chiesto per la creazione automatica di fonti.

Qualsiasi iscritto nel registro degli eventi (che attraversa EventLog.WriteEvent) sarà tentare automaticamente per creare l'origine del primo messaggio di log se non esiste - il problema è con la sicurezza, solo gli amministratori sono consentiti per creare sorgenti, quindi l'esecuzione come utente normale non riesce.

Per questo motivo è necessario aggiungere un EventLogInstaller, in modo che l'origine venga creata al momento dell'installazione (l'installazione viene eseguita dall'amministratore). Una volta creato, qualsiasi processo può quindi scrivere all'origine.

Questo quindi porta alla mia raccomandazione che è necessario creare e scrivere nel codice di accesso all'evento per garantire che la sorgente del registro eventi sia la stessa. Inoltre, se si scrive nel registro eventi in genere non si vuole essere in grado di "spegnerlo" attraverso l'errata configurazione.

Il mio consiglio personale è di default .NET Framework System.Diagnostics, in particolare il Service Trace Viewer è eccellente per la diagnosi di problemi, in particolare in ambienti multi-livello, multi-thread se si utilizza WCF dove può passare la correlazione identifica attraverso i livelli.

Problemi correlati