2015-09-01 19 views
8

Ich versuche, ein Ereignisprotokoll für eine universelle Windows-Anwendung zu erstellen. Früher hatten wir System.Diagnostics EventLog, Ereignisse zu protokollieren, aber ich konnte nichts Ähnliches auf der Windows 10 Universal Apps Plattform finden. Ist es möglich, Protokolle für Windows 10 zu erstellen und können diese Protokolle in eine Datei für den späteren Zugriff geschrieben werden?Ereignisprotokoll in Windows 10 Universal Apps

Ich suchte viel, konnte aber nichts finden.

Antwort

8

FileLoggingSession

Seit Windows 8.1 gibt es FileLoggingSession und LoggingChannel Klassen im Windows.Foundation.Diagnostics Namespace, der die Protokollierung Dateien ausführen kann, wenn er dazu konfiguriert. Sie können mehr im offiziellen documentation lesen.

Initialisierung, Verwendung und die Log-Datei abrufen kann wie im folgenden Ausschnitt getan werden, natürlich müssen Sie Schnittstellen schaffen, Singletons usw. machen es verwendbar:

// Initialization 
FileLoggingSession fileLoggingSession = new FileLoggingSession("session"); 
var loggingChannel = new LoggingChannel("channel"); 
fileLoggingSession.AddLoggingChannel(loggingChannel); 

// Log messages 
loggingChannel.LogMessage("error message", LoggingLevel.Error); 

// When file is needed 
var file = await fileLoggingSession.CloseAndSaveToFileAsync(); 

// Do anything with file 

LoggingSession

Genau wie FileLoggingSession schreibt Protokolle in eine Datei, aber der Hauptunterschied ist, dass FileLoggingSession Protokolle sofort in die Datei schreibt, und LoggingSession nicht, und Sie müssen manuell schreiben die Protokolle in eine Datei mit der SaveToFileAsync Methode. Aus der Dokumentation:

Die FileLoggingSession-Klasse sendet protokollierte Nachrichten an Datenträgerdateien, während sie protokolliert werden. Die FileLoggingSession-Klasse verwendet die sequenzielle Protokollierung. Dies bedeutet, dass alle Nachrichten an eine Festplattendatei gesendet werden und eine sequenzielle Protokollhistorie beibehalten wird. Dies unterscheidet sich von der LoggingSession-Klasse, die protokollierte Nachrichten bei Bedarf auf den Datenträger sendet. Dies geschieht, wenn ein Problem auftritt und der unmittelbare Verlauf von speicherinternen Nachrichten zur Analyse benötigt wird.

METROLOG

Sie haben eine andere Alternativen, wenn Sie nicht FileLoggingSession oder LoggingSession Klassen Sie wan't zu verwenden. Eine gute Lösung ist MetroLog, die ein FileStreamingTarget Ziel hat, das es sehr einfach macht, sich in einer Windows/Phone App anzumelden.

Sie den Logger erstellen, wenn Sie es benötigen, beispielsweise auf einer Seite:

public sealed partial class LogSamplePage : Win8Sample.Common.LayoutAwarePage 
{ 
    private ILogger Log = LogManagerFactory.DefaultLogManager.GetLogger<LogSamplePage>(); 
} 

Dann können Sie es auf der Seite wie folgt verwenden:

// flat strings... 
if (this.Log.IsInfoEnabled) 
    this.Log.Info("I've been navigated to."); 

// formatting... 
if (this.Log.IsDebugEnabled) 
    this.Log.Debug("I can also format {0}.", "strings"); 

// errors... 
try 
{ 
    this.DoMagic(); 
} 
catch(Exception ex) 
{ 
    if (this.Log.IsWarnEnabled) 
     this.Log.Warn("You can also pass in exceptions.", ex); 
} 

MetroEventSource

Die zweite Lösung ist this Protokollierung Beispiel in MSDN Beispielgalerie von Can Bilgin, wo Sie diehabenKlasse.Sie können Nachrichten zum Beispiel so einen Fehler protokollieren:

MetroEventSource.Log.Error("Here is the error message"); 

Wenn Sie diese Logger zu verwenden, vergessen Sie nicht, es auf Anwendung laufen zu initialisieren, wie im Beispielprojekt beschrieben.

+1

Ich habe die Dokumentation von FileLoggingSession durchgesehen und es heißt, dass FileLoggingSession sofort auf der HardDisk protokolliert. Allerdings sehe ich keine Probe für das gleiche. Es scheint, dass wir einen Protokollierungskanal erstellen, ihn zu FileLoggingSession hinzufügen und diesen Protokollkanal protokollieren müssen. Schließlich, wenn wir fileLoggingSession.closeAndSavetoFileAsync() aufrufen, schreibt es die Protokolle in File. Die Frage ist, wie Logs sofort auf Hardisk mit FileLoggingSession geschrieben werden? Weil ich nicht in der Lage bin, closeAndSaveToFileAsync() aufzurufen, wenn meine App zuvor abstürzt. Freundlich helfen. Vielen Dank! –

Verwandte Themen