Domanda

Sto passando dal codice in C ++ a C #. Devo sostituire il mio sistema di registrazione / report degli errori C ++ con qualcosa di simile in C #.

Nella mia fonte C ++ posso scrivere

LOGERR (" Alcuni errori "); o LOGERR (" Errore con input% se% d " ;, stringvar, intvar);

La macro & amp; il codice della libreria di supporto passa quindi il messaggio (eventualmente varargs) formattato in un database insieme al file di origine, alla riga di origine, al nome utente e all'ora. Gli stessi dati vengono inoltre inseriti in una struttura di dati per la successiva segnalazione all'utente.

Qualcuno ha snippet di codice C # o puntatori ad esempi che riportano questo errore / segnalazione di base?

Modifica: All'epoca in cui avevo posto questa domanda, ero davvero nuovo su .NET e non ero a conoscenza di System.Diagnostics.Trace. System.Diagnostics.Trace era ciò di cui avevo bisogno in quel momento. Da allora ho usato log4net su progetti in cui i requisiti di registrazione erano più grandi e più complessi. Basta modificare il file di configurazione XML a 500 righe e log4net farà tutto il necessario :)

È stato utile?

Soluzione

Molti sostenitori di log4net qui quindi sono sicuro che questo verrà ignorato, ma aggiungerò la mia preferenza:

System.Diagnostics.Trace

Ciò include i listener che ascoltano i tuoi metodi Trace () , quindi scrivono in un file di registro / finestra di output / registro eventi, quelli nel framework inclusi sono DefaultTraceListener , TextWriterTraceListener e EventLogTraceListener . Ti consente di specificare livelli (Avviso, Errore, Informazioni) e categorie.

Classe di traccia su MSDN
Scrittura nel registro eventi in un'applicazione Web
UdpTraceListener - scrivi log4net messaggi XML compatibili in un visualizzatore di log come log2console

Altri suggerimenti

Consiglio vivamente di guardare log4Net . Questo post copre la maggior parte di ciò che devi ottenere iniziato.

Un'altra buona libreria di registrazione è NLog , che può accedere a molti luoghi diversi, come file, database, logger eventi ecc.

Uso The Object Guy's Logging Framework - come fanno molte persone che lo provano. Questo ragazzo ha alcuni commenti a riguardo.

Enterprise Library è una solida alternativa a log4net e offre anche molte altre funzionalità (cache, gestione delle eccezioni, validazione, ecc ...). Lo uso praticamente in ogni progetto che costruisco.

Altamente raccomandato.

Anche se lo odio personalmente, log4net sembra essere lo standard di fatto per la registrazione in C #. Esempio di utilizzo:

log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Error(“Some error”);
log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar);

Come ho detto in un altro thread, abbiamo utilizzato The Object Guy's Logging Framework in più app di produzione per diversi anni. È super facile da usare ed estendere.

Log4Net è un framework di registrazione piuttosto completo che ti permetterà di accedere a diversi livelli (Debug , Error, Fatal) e inviare queste istruzioni di registro in luoghi diversi (rolling file, servizio web, errori di Windows)

Sono in grado di accedere facilmente ovunque creando un'istanza del logger

private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));

e quindi registrando l'errore.

_log.Error("Error messsage", ex);

Serilog è in ritardo alla festa qui, ma offre alcune opzioni interessanti al tavolo. Assomiglia molto ai logger classici basati su testo da usare:

Log.Information("Hello, {0}", username);

Ma, a differenza dei framework precedenti, trasforma il messaggio e gli argomenti in una stringa solo durante la scrittura di testo, ad es. su un file o sulla console.

L'idea è che se si utilizza un archivio dati in stile "NoSQL" per i registri, è possibile registrare eventi come:

{
    Timestamp: "2014-02-....",
    Message: "Hello, nblumhardt",
    Properties:
    {
        "0": "nblumhardt"
    }
}

La sintassi della stringa di formato .NET è estesa in modo da poter scrivere l'esempio sopra come:

Log.Information("Hello, {Name}", username);

In questo caso la proprietà verrà chiamata Name (anziché 0 ), rendendo più semplice l'interrogazione e la correlazione.

Esistono già alcune buone opzioni per l'archiviazione. MongoDB e Azure Table Storage sembrano essere abbastanza popolari per il fai-da-te. Inizialmente ho creato Serilog (anche se si tratta di un progetto della comunità) e ora sto lavorando a un prodotto chiamato Seq , che fornisce spazio di archiviazione e interrogazione di questo tipo di eventi di registro strutturati.

È possibile utilizzare la registrazione .NET integrata. Cerca in TraceSource e TraceListeners, possono essere configurati nel file .config.

Idem per log4net. Sto aggiungendo i miei due bit perché per un uso effettivo, ha senso guardare alcune implementazioni open source per vedere esempi di codice del mondo reale con alcune utili aggiunte. Per log4net, suggerirei in cima alla mia testa guardando sottotesto . Dai un'occhiata in particolare ai bit di avvio dell'applicazione e assemblyinfo.

Oltre alla coppia di commenti attinenti all'uso dei metodi System.Diagnostics per la registrazione, vorrei anche sottolineare che DebugView lo strumento è molto accurato per controllare l'output di debug quando necessario - a meno che non sia necessario, non è necessario che le app producano un file di registro, basta avviare DebugView come e quando necessario.

La traccia integrata in System.Diagnostics va bene in .NET Framework e la utilizzo su molte applicazioni. Tuttavia, uno dei motivi principali per cui utilizzo ancora log4net è che la traccia integrata in .NET Framework manca di molte delle utili appendici complete che Log4net fornisce già integrate.

Ad esempio, in .NET Framework non esiste davvero un buon listener di tracce di file rolling diverso da quello in una DLL VB.NET che in realtà non è così completo.

A seconda dell'ambiente di sviluppo, consiglierei di utilizzare log4net a meno che non siano disponibili strumenti di terze parti, quindi direi di utilizzare le classi di traccia System.Diagnostics. Se hai davvero bisogno di un appender / tracelistener migliore, puoi sempre implementarlo da solo.

Ad esempio, molti dei nostri clienti richiedono che non utilizziamo librerie open source quando installate sui loro computer aziendali, quindi in questo caso le classi di tracciamento di .NET Framework sono perfette.

Inoltre - http://www.postsharp.org/ è una libreria AOP che sto cercando che può anche aiutare a loggare come dimostrato qui sul progetto di codice: http: // www.codeproject.com/KB/dotnet/log4postsharp-intro.aspx .

ExceptionLess è uno dei pacchetti nuget più semplici disponibili da utilizzare per la registrazione. È un progetto open source . Si occupa automaticamente dell'eccezione non gestita e sono disponibili opzioni per registri manuali . Puoi accedere online o self host sul server locale.

Log4Net, come altri hanno già detto, è abbastanza comune e simile a Log4j che ti aiuterà se dovessi mai usare Java.

Hai anche la possibilità di utilizzare il Logging Application Block http: // www. codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top