Frage

Ich mache meinen Wechsel von Codierung in C ++ zu C #. Ich brauche meine C ++ Fehlerprotokollierung / Reporting-Makro-System mit etwas ähnlichem in C # ersetzen.

In meiner C ++ Quelle kann ich schreiben

logerr ( "Einige Fehler"); oder Logerr ( "Error mit Eingängen% s und% d", StringVar, IntVar);

Das Makro & Unterstützung Bibliothekscode übergibt dann die (möglicherweise varargs) formatierte Nachricht in einer Datenbank zusammen mit der Quelldatei, Source-Leitung, den Benutzernamen und Zeit. Die gleichen Daten werden auch in eine Datenstruktur gestopft später für den Benutzer berichten.

Hat jemand C # Code-Schnipsel oder Zeiger auf Beispiele, die diese grundlegende Fehlerberichterstattung / Protokollierung tun?

Edit: In der Zeit, die ich diese Frage gestellt ich wirklich neu zu .NET und war nicht bewusst System.Diagnostics.Trace. System.Diagnostics.Trace war das, was ich damals brauchte. Seitdem habe ich log4net an Projekten eingesetzt, in denen die Logging-Anforderungen waren größer und komplexer. Bearbeiten Sie einfach, dass die XML-Konfigurationsdatei 500 Zeilen und log4net wird alles tun, werden Sie jemals brauchen werden:)

War es hilfreich?

Lösung

Viele log4net spricht hier also bin ich sicher, dass dies wird ignoriert, aber ich werde meinen eigenen Vorlieben hinzufügen:

System.Diagnostics.Trace

Dazu gehört Zuhörer, die für Ihre Trace() Methoden zu hören, und dann in ein Protokolldatei / Ausgabefenster / Ereignisprotokoll schreiben, die im Rahmen, die enthalten sind, sind DefaultTraceListener, TextWriterTraceListener und die EventLogTraceListener. Es ermöglicht Ihnen, Ebenen (Warnung, Fehler, Info) und Kategorien angeben.

Trace-Klasse auf MSDN
Schreiben in das Ereignisprotokoll in einer Web Application
UdpTraceListener - log4net kompatible XML-Nachrichten an einen Log-Viewer schreiben wie log2console

Andere Tipps

Ich würde empfehlen, bei der Suche Log4Net . Diese Post deckt die Mehrheit von dem, was Sie brauchen, um gestartet.

Eine weitere gute Logging-Bibliothek ist NLog , was eine Menge von verschiedenen Orten anmelden kann, wie zum Beispiel Dateien, Datenbanken, Event Logger etc.

Ich benutze Das Objekt Guy Logging-Framework --as die meisten Menschen tun, die es versuchen. Dieser Kerl hat einige interessante Kommentare darüber rel="nofollow.

Enterprise Library eine solide Alternative ist es, log4net und es bietet auch eine Reihe von anderen Funktionen (Caching, Ausnahmebehandlung, Validierung, etc ...). Ich benutze es auf fast jedes Projekt, das ich bauen.

Sehr zu empfehlen.

Auch wenn ich persönlich hasse es, log4net scheint der De-facto-Standard zu sein für C # Protokollierung. Verwendungsbeispiel:

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

Wie ich in einem anderen Thread gesagt, haben wir das Objekt Guy Logging-Framework in mehreren benutze Produktion Apps für mehrere Jahre. Es ist super einfach zu bedienen und erweitern.

Log4Net ist ein ziemlich umfassendes Logging-Framework, das es Ihnen erlaubt, verschiedene Ebene einzuloggen (Debug , Fehler, Fatal) und Ausgang dieses Protokoll Aussagen können verschiedenen Orte (Roll Datei, Web Service, Windows-Fehler)

Ich bin in der Lage problemlos überall anmelden, indem eine Instanz des Loggers zu schaffen

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

und dann den Fehler zu protokollieren.

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

Serilog ist spät zur Party hier, aber bringt einige interessante Optionen auf den Tisch. Es sieht aus wie klassische textbasierte Logger zu verwenden:

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

Aber im Gegensatz zu früheren Frameworks, es macht nur die Nachricht und Argumente in einen String beim Schreiben von Text, z.B. in einer Datei oder die Konsole.

Die Idee ist, dass, wenn Sie mit einem ‚NoSQL'-Stil Datenspeicher für Protokolle, können Sie Ereignisse aufzeichnen wie:

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

Die .NET-Format-String-Syntax erweitert wird, so dass Sie das obige Beispiel schreiben können wie:

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

In diesem Fall wird die Eigenschaft genannt Name wird (statt 0), so dass Abfrage- und Korrelation zu erleichtern.

Es gibt bereits einige gute Möglichkeiten für die Lagerung. MongoDB und Azure Tabellen Speicher scheinen für DIY sehr beliebt zu sein. Ich baute ursprünglich Serilog (obwohl es sich um ein Gemeinschaftsprojekt ist) und ich arbeite jetzt an einem Produkt namens Seq , die Lagerung bietet und Abfragen dieser Art von strukturierten Protokollereignissen.

Sie können in .NET Logging gebaut werden, benutzen. Schauen Sie in Trace und Tracelisteners, können sie in der .config-Datei konfiguriert werden.

Das Gleiche gilt für log4net. Ich füge meine zwei Bits, weil für die tatsächlichen Einsatz, ist es sinn bei einigen Open-Source-Implementierungen aussehen läßt reale Welt Code-Beispiele mit einigen Ergänzungen praktisch zu sehen. Für log4net, würde ich aus der Spitze von meinem Kopf vorschlagen Blick auf Subtext . Vor allem beim Start der Anwendung einen Blick und Assembly Bits.

ausnahmslose ist eine der einfachsten nuget Paket für die Protokollierung zu verwenden. Es ist ein Open-Source-Projekt . Es kümmert sich automatisch um nicht behandelte Ausnahme und Optionen für manuell protokolliert verfügbar sind . Sie können Online-log oder Selbst Host auf lokalen Server.

Log4Net, wie andere gesagt haben, ist ziemlich verbreitet und ähnlich wie Log4j die Ihnen helfen, wenn Sie jemals eine Java tun.

Sie haben auch die Möglichkeit, die Logging Application Block http: // www. codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top