Je suis dans une situation où certains événements de journal contiennent de grandes valeurs de propriété (dans ce cas particulier, un grand paquet de XML). Je veux utiliser la méthode de Serilog ByIncludingOnly
pour utiliser un puits supplémentaire pour ces gros événements de données. Voici un exemple de ce que je pensais pouvoir faire :
private static void FilteredLogging()
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(new RawFormatter())
.WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets))
.WriteTo.File("big.txt")
.CreateLogger();
Log.Information("go");
Log.ForContext("data", "12345").Information("Small packet");
Log.ForContext("data", "1234567890987654321").Information("Big packet");
Log.CloseAndFlush();
}
private static bool LargeDataPackets(LogEvent le)
{
return le.Properties.ContainsKey("data") &&
le.Properties["data"].ToString().Length > 10;
}
Cependant, lorsque j'exécute ce code, les trois messages sont envoyés dans le fichier "big.txt". Je m'attendrais à ce que seul le dernier élément ("Big packet") soit transféré dans le fichier puisqu'il s'agit du seul événement avec un nom de fichier data
qui dépasse 10 caractères.
J'utilise Serilog 2.0.