J'ai configuré Serilog dans appsettings.json
pour enregistrer les entrées dans Logstash via tcp dans mon asp net core web api
app de la manière suivante:
{
"Serilog": {
"Using": [ "Serilog.Sinks.Network" ],
"MinimumLevel": {
"Default": "Information"
},
"WriteTo:0": {
"Name": "TCPSink",
"Args": {
"uri": "tcp://172.26.48.39:5066"
}
},
"Properties": {
"app_id": "my-service-api",
"index": "my-app-"
}
},
...
}
Mais il enregistre trop de messages. Par exemple, j'ai une méthode d'action CreateToken dans le contrôleur de jeton:
[HttpPost]
public ActionResult<string> CreateToken([FromBody] CredentialsModel credentials)
{
var user = _authentication.Authenticate(credentials);
if (user == null)
{
Log.Warning("Unable to authenticate an user: {Login}, {Password}",
credentials.Username, credentials.Password);
return Unauthorized();
}
return BuildToken();
}
Je dois enregistrer un seul message:
Impossible d'authentifier le mot de passe de connexion d'un utilisateur
Mais Serilog enregistre les éléments suivants:
Demande de démarrage HTTP/1.1 POST http: // localhost: 5000/api/token application/json 57
Route correspondant à "{action = \" CreateToken\", controller = \" Token\"}". Exécution de l'action "Deal.WebApi.Controllers.TokenController.CreateToken (Deal.WebApi)"
Exécution de la méthode d'action "Deal.WebApi.Controllers.TokenController.CreateToken (Deal.WebApi)" avec des arguments (["Deal.BL.Models.Auth.CredentialsModel"]) - État de validation: valide
Impossible d'authentifier un utilisateur: mot de passe de connexion
La méthode d'action exécutée "Deal.WebApi.Controllers.TokenController.CreateToken (Deal.WebApi)", a renvoyé le résultat "Microsoft.AspNetCore.Mvc.UnauthorizedResult" dans 11.0935ms.
Exécution de HttpStatusCodeResult, définition du code d'état HTTP 401
Action exécutée "Deal.WebApi.Controllers.TokenController.CreateToken (Deal.WebApi)" en 95,272 ms
Demande terminée en 123.9485ms 401
Comment puis-je me débarrasser des messages indésirables?
C'est mon Program.cs
fichier:
public class Program
{
public static void Main(string[] args)
{
var currentEnv = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{currentEnv}.json", true)
.AddEnvironmentVariables()
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(config)
.CreateLogger();
try
{
Log.Information("Start web Host");
CreateWebHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseSerilog()
.UseStartup<Startup>();
}
Vous pouvez remplacer les messages de journal de catégorie dans votre appsettings.json
. Par exemple, le appsettings.json
Suivant définit les messages de journal Microsoft
pour qu'ils se déconnectent uniquement pour ceux considérés Error
:
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Error"
}
},
...
}
La propriété qui nous intéresse ici est Override
, qui représente un objet dont les propriétés sont des préfixes de catégorie et les valeurs sont les Niveau de journal Serilog à utiliser.
Étant donné que votre propre message de journal personnalisé ne sera pas enregistré dans une catégorie Microsoft
, vous verrez toujours ce dans la sortie.