AspNet Core Serilog

in ASPNET Core

Creare log con SeriLog in .Net Core

Per poter utilizzare Serilog e loggare all’interno di Microsoft SQL Server è necessario installare 3 pacchetti:

  • Serilog.AspNetCore
  • Serilog.Settings.Configuration
  • Serilog.Sinks.MSSqlServer

L’installazione, ovviamente, può avvenire tramite NUGET oppure da linea di comando.

Il primo step riguarda la configurazione dell’ambiente di logging, impostando correttamente la sezione presente all’interno del file appsettings.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost\\sqlexpress;Database=xxx;User Id=xx;Password=xxxxx;",
    "Log": "Server=localhost\\sqlexpress;Database=xxx;User Id=xx;Password=xxxxx;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information",
      "Microsoft.EntityFrameworkCore.Database.Command": "Information",
    }
  }
 }

dove è stata inserita la stringa di connessione chiamata Log. Questa stringa di connessione verrà utilizzata per indicare il server Microsoft Sql Server e il database che verrà utilizzato per la memorizzazione tramite Serilog.

A questo punto è necessario modificare il file Startup.cs per poter utilizzare Serilog. All’interno del metodo ConfigureServices inserendo :

   Log.Logger = new LoggerConfiguration()
                .Enrich.FromLogContext()
                .WriteTo
                .MSSqlServer(
                    connectionString: this.Configuration.GetConnectionString("Log"),
                    sinkOptions: new MSSqlServerSinkOptions { TableName = "LogEvents", AutoCreateSqlTable = true, SchemaName = "dbo" })
                .CreateLogger();

            _ = services.AddLogging(c => c.AddSerilog(dispose: true));

La prima parte riguada la creazione della configurazione del logger e la scrittura dei log (tramite il sink Microsoft SQL Server) utilizzando la stringa di connessione definita all’interno di appsettings.json. Inoltre vengono specificate tra le opzioni il nome della tabella, l’autocreazione delle tabella all’interno del database, e lo schema che dovrà essere utilizzato.

Al termine della configurazione viene aggiunto Serilog all’interno dei services.

A questo punto ogni volta che verrà utilizzato il logger all’interno di una action, verranno scritti all’interno di SQL Server.

E’ inoltre possibile abilitare il log di Serilog all’interno del Program.cs per verificare eventuali problemi di connessione/accesso al database.

Per l’abilitazione del log è necessario aggiungere queste righe all’interno del Program.cs:

...

Serilog.Debugging.SelfLog.Enable(msg =>
{
    Debug.Print(msg);
    Debugger.Break();
});

...

Inoltre, potrebbe verificarsi un problema legato al tipo di certificato utilizzato in fase di dev. Per risolvere è sufficiente aggiungere in fondo alla stringa di connessione TrustedCertificate=true:

connectionString: "Server=.\\SqlExpress;Database=logdb;User Id=USERNAME; Password=PWD;TrustServerCertificate=True