SourceContext

时间:2017-11-08 16:59:05

标签: c# logging asp.net-core serilog

我正在尝试在一个小样本项目中实现serilog。到目前为止我做了以下事情:

  • 创建新的ASP.NET核心Web应用程序(MVC)
  • Install-Package Serilog.AspNetCore
  • Install-Package Serilog.Sinks.File
  • Install-Package Serilog.Formatting.Compact
  • 关注this blogpost
  • 尝试关注this blogpost

我的问题:

是否有可能根据CategoryName(在我的情况下为“MyLogger”)配置两个不同的记录器?我希望这个记录器使用与我的默认记录器不同的文件。在我的快乐世界幻想中,它看起来像:

        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
            .Enrich.FromLogContext()
            .WriteTo.File(new CompactJsonFormatter(), @"C:\temp\standardLog.txt")
            .WriteTo.File(new CompactJsonFormatter(), @"C:\temp\specialLog.txt").Filter.ByIncludingOnly(x => x.SourceContext("MySpecialLogger")
            .CreateLogger();

如果我创建一个新的Logger var logger = _loggerFactory.CreateLogger("MySpecialLogger");,日志将在我的specialLog.txt文件中安全。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你需要 Serilog.Sinks.Map

dotnet add <PROJECT> package Serilog.Sinks.Map -v 1.0.0-dev-00012

然后:

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
        .Enrich.FromLogContext()
        .WriteTo.Map("SourceContext", null, (sc, wt) =>
            wt.File(new CompactJsonFormatter(), sc == "MySpecialLogger" ?
                @"C:\temp\specialLog.txt" :
                @"C:\temp\standardLog.txt"))
        .CreateLogger();