Hangfire(v1.3 +)有一个'聪明'的feature,它可以获取应用程序现有的日志记录设置并使用它。
从Hangfire 1.3.0开始,如果您的应用程序已经通过反射使用了以下库之一,那么您无需执行任何操作(因此Hangfire本身不依赖于其中任何库)。
因为我不想将hangfire日志记录与我的应用程序日志混合在一起,所以我想将它们过滤到一个单独的日志文件中。
Serilog has filters要做到这一点,但它需要一些东西来过滤。
Hangfire是否包含我在过滤时可以指定的任何有用上下文?
我认为你可以使用的过滤器看起来像:
Log.Logger = new LoggerConfiguration()
.WriteTo.ColoredConsole()
.Filter.ByIncludingOnly(Matching.FromSource("Hangfire"))
.CreateLogger();
另见this post。
我无法让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();