giovedì 1 maggio 2025

C# utilizzo dei log con Serilog tutorial

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.
In questo articolo vedremo come utilizzare il componente gratuito Serilog, qui Serilog — simple .NET logging with fully-structured events il sito ufficiale.



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.



Riferimenti nuget serilog
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#

using Serilog;


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.


serilog creazione di un file log
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.


Gestione dei log con serilog
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.


C# serilog tutorial
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. 

C# tutorial Serilog
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