In questo articolo, vedremo come dotare le nostre applicazioni, in particolare di tipo application Windows, della gestione dei log.
Il codice presente in questo articolo, con un minimo di adattamento, può essere utilizzando anche per le applicazioni Web.
La gestione dei log diviene molto importante, soprattutto in quelle applicazioni dove si fanno uso di molti utenti e soprattutto di funzionalità complesse.
Dal log possiamo risalire alle varie fasi che hanno portato ad un errore o determinata azione.
Creazione del progetto
Si crea un nuovo progetto di tipo "Windows Application" con l'ultima versione del Framework .Net, nel momento in cui viene pubblicato l'articolo, la versione è la 9.
Dopo aver creato il progetto, aggiungiamo nella form, un pulsante dove la proprietà "Text" avrà come valore "Log", mentre per la proprietà "Name" il valore "BtnSerilog.
Dobbiamo aggiungere al progetto, i riferimenti alla libreria serilog, da Nuget (strumenti->Gestione Pacchetti Nuget->Gestione Pacchetti Nuget per la soluzione) digitiamo "Serilog". Come libreria aggiungiamo "Serilog", "Serilog.sinks.file" e "Serilog.sinks.console", il tutto come mostrato in figura 1.
 |
Figura 1 - Riferimenti alla libreria Serilog |
Terminata l'aggiunta al progetto delle librerie Serilog, la creazione del progetto è terminata.
Stesura del codice
Passiamo in visualizzazione codice della nostra applicazione, ed in alto sopra ad ogni dichiarazione, dove vanno inseriti i namespace, aggiungiamo quello di riferimento alla libreria.
Di seguito si riporta la dichiarazione delle suddette operazioni.
C#
Passiamo in visualizzazione grafica della form, in modo da visualizzare il pulsante e la nostra form.
Facciamo click in una qualunque parte della form, in modo da passare in visualizzazione codice nell'evento load della form.
In questo evento, scriviamo il codice per la configurazione del load.
C#
private void Form1_Load(object sender, EventArgs e)
{
//Configura il log
Log.Logger
= new LoggerConfiguration()
.MinimumLevel.Information()//Nel momento in cui deve segnalare i
messaggi
.WriteTo.Console() //Visualizza il log nella console
.WriteTo.File("logs/logEsempio.txt", rollingInterval: RollingInterval.Day) //scrive il log nel file
.CreateLogger();
}
Come si è visto nel frammento di codice precedente, dopo aver inizializzato l'oggetto Log.Logger, vengono impostati alcuni parametri.
In particolare, il livello minimo con il quale iniziare a scrivere il logo, nell'esempio precedente, tutti quelli che sono dal livello Information, in su. Informazioni, viene prima di Warning, e quest'ultimo a prima volta di Error, in questo modo vengono scritti i log di informazione, avvertimento ed errore.
Con il metodo Console, impostiamo che il log viene visualizzato nella finestra di console (qualora è un progetto a console) mentre tramite il parametro "File", impostiamo il percorso e nome del file in cui scrivere il log, ed il tempo in cui scrivere (in questo caso ogni giorno viene scritto un nuovo file).
Queste righe permettono di configurare il log.
Passiamo in visualizzazione grafica, in modo da visualizzare la form con il pulsante.
Facciamo doppio click sul pulsante inserito in precedenza, in modo da passare in visualizzazione codice dell'evento click del pulsante.
In questo evento, inseriamo le prime righe per scrivere nel log, le informazioni.
Di seguito si riporta il codice che permette di scrivere log di tipo informativo, avvertimento ed errore.
C#
private void
BtnSerilog_Click(object sender, EventArgs e)
{
//Logga un messaggio di errore
Log.Error("Questo è un messaggio di errore");
//Logga un messaggio di avviso
Log.Warning("Questo è un messaggio di
avviso");
//Logga un messaggio di informazione
Log.Information("Questo è un messaggio di
informazione");
//Chiudo il log
Log.CloseAndFlush();
}
Tramite il metodo "CloseAndFlush", chiudiamo la scrittura del log.
A questo punto avviamo la nostra applicazione, e noteremo che al click del pulsante, verrà generato un file di log. Nella figura 2, sono riportati più log, riguardante appunto l'uso dei giorni precedenti.
 |
Figura 2 - La creazione dei file dei log |
Se andiamo ad aprire il file appena creato, noteremo il testo che abbiamo inserito nei vari metodi (information, Warning, Error) dell'evento click del pulsante, il tutto come mostrato in figura 3.
 |
Figura 3 - Il testo dei vari log |
Se invece vogliamo solo visualizzare i messaggi di errore, nella parte di configurazione, anzichè impostare "Information" come parametro, impostiamo "Error", il tutto come mostrato qui di seguito.
C#
private void Form1_Load(object sender, EventArgs e)
{
//Configura il log
Log.Logger
= new LoggerConfiguration()
.MinimumLevel.Error()//Nel momento in cui deve segnalare i
messaggi
.WriteTo.Console() //Visualizza il log nella console
.WriteTo.File("logs/logEsempio.txt", rollingInterval: RollingInterval.Day) //scrive il log nel file
.CreateLogger();
}
Utilizzando sempre il codice dell'evento click, il risultato sarà come riportato in figura 4, ossia solo i messaggi di errore, mentre quelli di tipo "Information" e "Warning" non verrà scritto nel file.
 |
Figura 4 - La scrittura del messaggio di soli errori |
Nel caso che vogliamo aggiungere dei valori presenti in qualche variabile oppure oggetti, possiamo passare ai vari log (Information, Warning ed Error) il valore della variabile o oggetto.
Di seguito si riporta il frammento di codice di esempio a tale passaggio nell'evento click del pulsante.
C#
private void BtnSerilog_Click(object sender, EventArgs e)
{
//Logga un messaggio di errore
var utente
= new { Nome = "Emanuele", Cognome = "Mattei" };
Log.Error("Errore da parte di
{@utente}",
utente);
Log.Error("Questo è un messaggio di
errore");
//Chiudo il log
Log.CloseAndFlush();
}
Il risultato sarà come quello mostrato in figura 5.
 |
Figura 5 - il risultato del log con il valore dell'oggetto |
Conclusioni
L'articolo ha voluto fornire al lettore una panoramica sull'utilizzo dei log con la libreria Serilog, fornendo alcuni aspetti di base sulla gestione delle informazioni del proprio progetto. Una libreria molto usata e che offre funzionalità, anche avanzate e di una carte complessità. Quello che rende molto interessante questa libreria è la semplicità di utilizzo, che con poche righe di codice, si possono eseguire operazioni anche complesse.
Nessun commento:
Posta un commento