La façon dont la journalisation est configurée a un peu changé... La méthode recommandée (et assez bien documentée dans le document ce problème/annonce GitHub pour le faire maintenant est de configurer les enregistreurs sur le AddLogging
comme
services.AddLogging(builder =>
{
builder.AddConfiguration(Configuration.GetSection("Logging"))
.AddConsole()
.AddDebug();
});
Et avoir un appsettings.json
comme
Avis
Il semble que quelques personnes soient confuses, car l'exemple ne montre que la configuration de l'option Console
et pas tous les enregistreurs.
Le site LogLevel
configure le niveau de journalisation pour tous les espaces de noms ( Default
) ou pour un espace de nom spécifique ( System
Remplace la valeur par défaut pour toutes les classes d'enregistrement dont l'espace de nom commence par System.*
.
Il s'agit de la classe utilisée dans T
en ILogger<T>
). Cela permet de définir un niveau de journalisation supérieur ou inférieur à celui par défaut pour les enregistreurs de cet espace de nom.
{
"ApplicationInsights": {
"InstrumentationKey": ""
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Information",
"System": "Warning",
"Microsoft": "Information"
},
"Console": {
"LogLevel": {
"Default": "Warning",
"System": "Information",
"Microsoft": "Information"
}
}
}
}
Veuillez noter que la structure du fichier appsettings.json a été modifiée par rapport à ce qu'elle était dans la version 1.x de .NET Core. Logging
l'entrée dans la appsettings.json
contient désormais les noms des fournisseurs de journaux, ce qui vous permet de configurer les niveaux de journalisation par fournisseur de journaux.
Auparavant, l'entrée dans appsettings.json
ne serait applicable qu'au logger de la console.
Il est également possible de déplacer l'enregistrement à l'intérieur de l'espace de travail. WebHostBuilder
à la place.
public static void Main()
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddJsonFile("hosting.json", optional: false)
.AddEnvironmentVariables();
})
.ConfigureLogging((webhostContext, builder) => {
builder.AddConfiguration(webhostContext.Configuration.GetSection("Logging"))
.AddConsole()
.AddDebug();
})
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
host.Run();
}
Mise à jour
Dans le cas où l'on ne veut pas utiliser l'option appsettings.json
On peut aussi enregistrer les filtres dans le code.
services.AddLogging(builder =>
{
builder.AddConfiguration(Configuration.GetSection("Logging"))
// filter for all providers
.AddFilter("System", LogLevel.Debug)
// Only for Debug logger, using the provider type or it's alias
.AddFilter("Debug", "System", LogLevel.Information)
// Only for Console logger by provider type
.AddFilter<DebugLoggerProvider>("System", LogLevel.Error)
.AddConsole()
.AddDebug();
});
0 votes
will give me them once
Qu'est-ce que vous entendez par là ?0 votes
Modifié ; j'obtiens Info et Error deux fois - mais si je retire ma ligne AddConsole() - j'obtiens Info et Error une fois - mais aucun message Trace ou Debug avec ou sans ma ligne explicite pour dire console et niveau Trace.
3 votes
Êtes-vous en train de courir en développement ? L'environnement par défaut est maintenant la production vous pouvez essayer
set ASPNETCORE_ENVIRONMENT=Development; dotnet run
0 votes
J'ai rencontré un problème similaire. L'ajout d'un
await Task.Delay(1)
après les déclarations de journalisation permet à la console d'afficher les journaux. Si on l'enlève, seuls des journaux partiels sont affichés sur la console. La réponse acceptée ne fait rien en réalité. Il semble que ce soit un problème de threading.