Ich wechsle von der Codierung in C ++ zu C #. Ich muss mein C ++ - Makrosystem für Fehlerprotokollierung / Berichterstellung durch etwas Ähnliches in C # ersetzen.
In meiner C ++ - Quelle kann ich schreiben
LOGERR ("Irgendein Fehler"); oder LOGERR ("Fehler mit den Eingaben% s und% d", stringvar, intvar);
Der Makro- und unterstützende Bibliothekscode übergibt dann die (möglicherweise varargs) formatierte Nachricht zusammen mit der Quelldatei, der Quellzeile, dem Benutzernamen und der Uhrzeit an eine Datenbank. Dieselben Daten werden auch in eine Datenstruktur gestopft, um sie später an den Benutzer zu melden.
Hat jemand C # -Code-Schnipsel oder Zeiger auf Beispiele, die diese grundlegende Fehlerberichterstattung / -protokollierung durchführen?
Bearbeiten: Als ich diese Frage stellte, war ich wirklich neu in .NET und kannte System.Diagnostics.Trace nicht. System.Diagnostics.Trace war das, was ich damals brauchte. Seitdem habe ich log4net in Projekten verwendet, in denen die Protokollierungsanforderungen größer und komplexer waren. Bearbeiten Sie einfach diese XML-Konfigurationsdatei mit 500 Zeilen und log4net erledigt alles, was Sie jemals brauchen werden :)
quelle
WriteLine()
Methode in überschreibenTextWriterTraceListener
, um eine automatische Zeitstempelfunktion in der Protokolldatei zu erreichen. Siehe diesen CodeProject-Artikel , Abschnitt 6.Ich würde empfehlen, sich log4Net anzuschauen . Dieser Beitrag behandelt den Großteil dessen, was Sie für den Einstieg benötigen.
quelle
Eine weitere gute Protokollierungsbibliothek ist NLog , die an vielen verschiedenen Orten wie Dateien, Datenbanken, Ereignisprotokollierern usw. protokollieren kann.
quelle
Ich verwende das Logging Framework von The Object Guy - genau wie die meisten Leute, die es versuchen. Dieser Typ hat einige interessante Kommentare dazu.
quelle
Die Unternehmensbibliothek ist eine solide Alternative zu log4net und bietet eine Reihe weiterer Funktionen (Caching, Ausnahmebehandlung, Validierung usw.). Ich benutze es für fast jedes Projekt, das ich baue.
Sehr empfehlenswert.
quelle
Obwohl ich es persönlich hasse, scheint log4net der De-facto-Standard für die C # -Protokollierung zu sein. Beispielnutzung:
log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program)); log.Error(“Some error”); log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar);
quelle
Wie ich in einem anderen Thread sagte, verwenden wir das Logging Framework von The Object Guy seit mehreren Jahren in mehreren Produktions-Apps. Es ist super einfach zu bedienen und zu erweitern.
quelle
Log4Net ist ein ziemlich umfassendes Protokollierungsframework, mit dem Sie auf verschiedenen Ebenen (Debug, Fehler, Schwerwiegend) protokollieren und diese Protokollanweisungen an möglicherweise unterschiedlichen Stellen ausgeben können (fortlaufende Datei, Webdienst, Windows-Fehler).
Ich kann überall einfach protokollieren, indem ich eine Instanz des Loggers erstelle
private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));
und dann den Fehler protokollieren.
_log.Error("Error messsage", ex);
quelle
Serilog kommt zu spät zur Party, bringt aber einige interessante Optionen auf den Tisch. Es sieht ähnlich aus wie bei klassischen textbasierten Loggern:
Log.Information("Hello, {0}", username);
Im Gegensatz zu früheren Frameworks werden die Nachricht und die Argumente jedoch nur beim Schreiben von Text in eine Zeichenfolge gerendert, z. B. in eine Datei oder die Konsole.
Die Idee ist, dass Sie, wenn Sie einen Datenspeicher im NoSQL-Stil für Protokolle verwenden, Ereignisse wie die folgenden aufzeichnen können:
{ Timestamp: "2014-02-....", Message: "Hello, nblumhardt", Properties: { "0": "nblumhardt" } }
Die String-Syntax im .NET-Format wurde erweitert, sodass Sie das obige Beispiel wie folgt schreiben können:
Log.Information("Hello, {Name}", username);
In diesem Fall wird die Eigenschaft aufgerufen
Name
(und nicht0
), was das Abfragen und Korrelieren erleichtert.Es gibt bereits einige gute Speicheroptionen. MongoDB und Azure Table Storage scheinen für Heimwerker sehr beliebt zu sein. Ich habe ursprünglich Serilog erstellt (obwohl es sich um ein Community-Projekt handelt) und arbeite jetzt an einem Produkt namens Seq , das die Speicherung und Abfrage dieser Art von strukturierten Protokollereignissen ermöglicht.
quelle
Sie können die integrierte .NET-Protokollierung verwenden. Schauen Sie sich TraceSource und TraceListeners an, sie können in der .config-Datei konfiguriert werden.
quelle
Das Gleiche gilt für log4net. Ich füge meine zwei Bits hinzu, da es für den tatsächlichen Gebrauch sinnvoll ist, einige Open-Source-Implementierungen zu betrachten, um reale Codebeispiele mit einigen praktischen Ergänzungen zu sehen. Für log4net würde ich vorschlagen, den Subtext von oben zu betrachten . Schauen Sie sich insbesondere die Bits für Anwendungsstart und Assemblyinfo an.
quelle
Neben einigen Kommentaren zur Verwendung der System.Diagnostics-Methoden für die Protokollierung möchte ich auch darauf hinweisen, dass das DebugView- Tool sehr gut geeignet ist, um die Debug-Ausgabe bei Bedarf zu überprüfen - es sei denn, Sie benötigen sie Um eine Protokolldatei zu erstellen, starten Sie DebugView bei Bedarf.
quelle
Die in System.Diagnostics integrierte Ablaufverfolgung ist in .NET Framework in Ordnung und wird in vielen Anwendungen verwendet. Einer der Hauptgründe, warum ich immer noch log4net verwende, ist, dass der integrierten .NET Framework-Ablaufverfolgung viele der nützlichen voll funktionsfähigen Appender fehlen, die log4net bereits integriert bietet.
Zum Beispiel gibt es in .NET Framework wirklich keinen guten Listener für fortlaufende Dateiverfolgung, außer dem in einer VB.NET-DLL, der wirklich nicht alle Funktionen bietet.
Abhängig von Ihrer Entwicklungsumgebung würde ich die Verwendung von log4net empfehlen, sofern keine Tools von Drittanbietern verfügbar sind. Dann würde ich sagen, dass Sie die System.Diagnostics-Ablaufverfolgungsklassen verwenden. Wenn Sie wirklich einen besseren Appender / Tracelistener benötigen, können Sie ihn jederzeit selbst implementieren.
Beispielsweise verlangen viele unserer Kunden, dass wir bei der Installation auf ihren Unternehmenscomputern keine Open-Source-Bibliotheken verwenden. In diesem Fall passen die .NET Framework-Ablaufverfolgungsklassen perfekt zusammen.
Zusätzlich - http://www.postsharp.org/ ist eine AOP-Bibliothek, die ich untersuche und die möglicherweise auch bei der Protokollierung hilft, wie hier im Codeprojekt gezeigt: http://www.codeproject.com/KB/dotnet/log4postsharp- intro.aspx .
quelle
ExceptionLess ist eines der einfachsten Nuget-Pakete, die für die Protokollierung verfügbar sind. Es ist ein Open Source Projekt. Nicht behandelte Ausnahmen werden automatisch behandelt, und Optionen für manuelle Protokolle sind verfügbar. Sie können sich online oder als Selbsthost auf dem lokalen Server anmelden .
quelle
Log4Net ist, wie andere gesagt haben, ziemlich verbreitet und ähnelt Log4j, was Ihnen helfen wird, wenn Sie jemals Java verwenden.
Sie haben auch die Möglichkeit, den Protokollierungsanwendungsblock http://www.codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx zu verwenden
quelle