3 votes

Filtrage des événements via ByIncludingOnly

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.

3voto

Nicholas Blumhardt Points 9208

Vos parenthèses sont légèrement décalées :

    Log.Logger = new LoggerConfiguration()
        .WriteTo.Console(new RawFormatter())
        .WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets))
            .WriteTo.File("big.txt")
        .CreateLogger();

Ça devrait l'être :

    Log.Logger = new LoggerConfiguration()
        .WriteTo.Console(new RawFormatter())
        .WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets)
            .WriteTo.File("big.txt"))
        .CreateLogger();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X