web-dev-qa-db-fra.com

Serilog ne fonctionne pas à partir de la configuration dans l'API asp.net core 2.2

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
           .UseSerilog((ctx, config) => { config.ReadFrom.Configuration(ctx.Configuration); })
           .UseStartup<Startup>();
}


public class Startup
{
    public IContainer Container { get; private set; }
    public Startup(IConfiguration configuration)
    {
        Log.Warning("test");
        Configuration = configuration;
    }

}

appsettings.json

{
    "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Default": "Information",
        "Microsoft": "Information",
        "System": "Information"
      }
    },
    "WriteTo": [

      {
        "Name": "RollingFile",
        "Args": {
          "pathFormat": "C:\\test.txt",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.ffff}|{TenantName}|{RequestId}|{SourceContext}|{Level:u3}|{Message:lj}{NewLine}{Exception}",
          "restrictedToMinimumLevel": "Information"
        }
      }
    ]
  },

  "AllowedHosts": "*"
}

J'ai tous les paquets installés 

  • Serilog, 
  • Serilog.AspCore, 
  • Serilog.Settings.Configuration, 
  • Serilog.Sink.File
4
Zoinky

Votre configuration est pour RollingFile mais votre liste de paquets dit Serilog.Sinks.File. Ce sont différents. Vous devez ajouter le package Serilog.Sinks.RollingFile et il devrait commencer à fonctionner.

Si vous souhaitez utiliser le récepteur File (qui, comme le recommande @Kirk dans les commentaires, est désormais l'option recommandée), vous devez modifier les paramètres pour

"WriteTo": [
    {
        "Name": "File",
        "Args": {
            "path": "C:\\test.txt",
            "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.ffff}|{TenantName}|{RequestId}|{SourceContext}|{Level:u3}|{Message:lj}{NewLine}{Exception}",
            "restrictedToMinimumLevel": "Information"
        }
    }

REMARQUE

La pathFormat devrait être path pour le File puits

Voir la Documentation Serilog File Sink

4
Simply Ged

Il semble que le problème était d'écrire directement dans c: et de ne pas utiliser File dans config, ce qui semble ne pas fonctionner, mais écrire dans un autre répertoire fonctionne.

Voici la solution finale pour quiconque rencontre ce problème.

Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
              WebHost.CreateDefaultBuilder(args)
                  .UseStartup<Startup>()
                  .UseSerilog();
}

Startup.cs

public Startup(IConfiguration configuration)
{
        var logConfiguration = new LoggerConfiguration()
            .ReadFrom.Configuration(configuration);

        Log.Logger = logConfiguration.CreateLogger();
        Configuration = configuration;

}

appsettings.json

"Serilog": {
"WriteTo": [
  {
    "Name": "File",
    "Args": {
      "path": "C:\\temp\\log.txt",
      "rollingInterval": "Day"
    }
  }
]

}

0
Zoinky

Ce n'est pas une réponse mais une observation. J'avais observé un problème certain ici. J'ai trois fichiers de paramètres. 

  1. appsettings.json, 
  2. appsettings.Development.json, 
  3. appsettings.VivekDev.json

J'ai sélectionné le profil de launchSettings.json tel que l'environnement soit VivekDev comme suit.

"ASPNETCORE_ENVIRONMENT": "VivekDev"

Maintenant, lorsque les paramètres suivants sont définis dans appsettings.VivekDev.json sans aucun paramètre Serilog dans appsettings.json , tout fonctionne correctement.

  "Serilog": {
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "log.txt",
          "rollingInterval": "Day"
        }
      }
    ]
  },

Mais quand j'ai 

"Serilog": {
  "WriteTo": [ "Debug" ]
},

dans appsettings.json , ceci remplace en quelque sorte le réglage de appsettings.VivekDev.json . Selon ma compréhension, cela est incorrect et le réglage situé dans appsettings.VivekDev.json devrait remplacer appsettings.json .

Et cela ne se produit que dans le cas d'un évier de fichier. Si j'utilise un autre évier tel qu'une console, les choses fonctionnent comme prévu. C’est le paramètre serilog dans appsettings.VivekDev.json annule correctement le paramètre serilog de appsettings.json .

Quelque chose est certainement buggy ici.

Ainsi, à partir de maintenant, j'ai supprimé les paramètres serilog dans appsettings.json et conservé le paramètre serilog write to file dans appsettings.VivekDev.json

0
VivekDev