将Hangfire日志过滤为单独的Serilog输出

问题描述 投票:1回答:2

Hangfire(v1.3 +)有一个'聪明'的feature,它可以获取应用程序现有的日志记录设置并使用它。

从Hangfire 1.3.0开始,如果您的应用程序已经通过反射使用了以下库之一,那么您无需执行任何操作(因此Hangfire本身不依赖于其中任何库)。

因为我不想将hangfire日志记录与我的应用程序日志混合在一起,所以我想将它们过滤到一个单独的日志文件中。

Serilog has filters要做到这一点,但它需要一些东西来过滤。

Hangfire是否包含我在过滤时可以指定的任何有用上下文?

hangfire serilog
2个回答
0
投票

我认为你可以使用的过滤器看起来像:

Log.Logger = new LoggerConfiguration()
    .WriteTo.ColoredConsole()
    .Filter.ByIncludingOnly(Matching.FromSource("Hangfire"))
    .CreateLogger();

另见this post


0
投票

我无法让Serilog Matching.FromSource(...)工作,Hangfire活动似乎没有那个属性。我有以下解决方案:

var logFile = "...";
var hangfireFile = "...";
var hangfireEvents = Matching.WithProperty<string>("Name", x => x.StartsWith("Hangfire"));

Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Verbose()
        .WriteTo.Logger(lc =>
            lc.Filter.ByExcluding(hangfireEvents)
              .WriteTo.RollingFile(new CompactJsonFormatter(new SafeJsonFormatter()), logFile))
        .WriteTo.Logger(lc => 
            lc.Filter.ByIncludingOnly(hangfireEvents)
              .WriteTo.RollingFile(new CompactJsonFormatter(new SafeJsonFormatter()), hangfireFile))
        .CreateLogger();
© www.soinside.com 2019 - 2024. All rights reserved.