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
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
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"
}
}
]
}
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.
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 .