FileLoggingSession
Dal Windows 8.1
ci sono FileLoggingSession
e LoggingChannel
classi del namespace Windows.Foundation.Diagnostics
, in grado di eseguire la registrazione di file quando configurato per farlo. Puoi leggere di più nella versione ufficiale documentation.
inizializzazione, l'utilizzo e il recupero del file di registro può essere fatto come nel seguente frammento, naturalmente è necessario creare interfacce, single, ecc per renderlo utilizzabile:
// 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
Proprio come FileLoggingSession
scrive i registri su un file, ma la differenza principale è che FileLoggingSession
scrive i registri immediatamente nel file, e LoggingSession
no, ed è necessario richiedere manualmente la scrittura dei registri su un file con loMetodo. Dalla documentazione:
La classe FileLoggingSession invia i messaggi registrati ai file su disco man mano che vengono registrati. La classe FileLoggingSession utilizza la registrazione sequenziale, il che significa che tutti i messaggi vengono inviati a un file su disco e viene conservata una cronologia sequenziale dei messaggi. Questo è distinto dalla classe LoggingSession, che invia messaggi registrati su disco su richiesta, e ciò accade quando c'è un problema e la cronologia immediata dei messaggi in memoria è necessaria per l'analisi.
METROLOG
avete un altro alternative se poi non vorrai usare FileLoggingSession
o LoggingSession
classi. Una buona soluzione è MetroLog che ha un target FileStreamingTarget
che rende molto semplice l'accesso a un'applicazione Windows/Phone.
Si crea il registratore quando ne avete bisogno, ad esempio, in una pagina:
public sealed partial class LogSamplePage : Win8Sample.Common.LayoutAwarePage
{
private ILogger Log = LogManagerFactory.DefaultLogManager.GetLogger<LogSamplePage>();
}
quindi è possibile utilizzare nella pagina come questa:
// 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
La seconda soluzione è l'esempio di registrazione this nella galleria di esempi MSDN di Can Bilgin, in cui è disponibile lo MetroEventSource
classe.È possibile registrare i messaggi, ad esempio un errore come questo:
MetroEventSource.Log.Error("Here is the error message");
Se si utilizza questo logger non dimenticate di inizializzare su Esegui applicazione, come descritto nel progetto di esempio.
Ho letto la documentazione di FileLoggingSession e dice che FileLoggingSession accede immediatamente all'HardDisk. Tuttavia non vedo alcun campione per lo stesso. Sembra che dobbiamo creare un canale di registrazione, aggiungerlo a FileLoggingSession, accedere utilizzando questo canale di log. Infine, quando chiamiamo fileLoggingSession.closeAndSavetoFileAsync(), Scrive i log su File. La domanda è Come scrivere registri immediatamente su hardisk utilizzando FileLoggingSession? Perché potrei non essere in grado di chiamare closeAndSaveToFileAsync() se la mia app si arresta prima. Gentilmente aiuto. Grazie! –