Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Serilog使用MicrosoftiLogger-从.NETCore中的一个代码记录到不同的位置_C#_.net_Asp.net Core_.net Core_Serilog - Fatal编程技术网

C# Serilog使用MicrosoftiLogger-从.NETCore中的一个代码记录到不同的位置

C# Serilog使用MicrosoftiLogger-从.NETCore中的一个代码记录到不同的位置,c#,.net,asp.net-core,.net-core,serilog,C#,.net,Asp.net Core,.net Core,Serilog,我正在通过Microsoft.Extensions.Logging.ILogger使用serilog。 这是我在Program.cs中的配置: public class Program { public static void Main(string[] args) { IConfigurationRoot configuration = new ConfigurationBuilder()

我正在通过Microsoft.Extensions.Logging.ILogger使用serilog。 这是我在Program.cs中的配置:

public class Program
  {
    public static void Main(string[] args)
    {
      IConfigurationRoot configuration = new ConfigurationBuilder()
                                          .AddJsonFile("appsettings.json")
                                          .Build();
      Log.Logger = new LoggerConfiguration()
                     .ReadFrom.Configuration(configuration)
                     .CreateLogger();
      CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
          .UseSerilog()
          .ConfigureLogging((context, logging) =>
          {
            logging.ClearProviders();
            logging.AddSerilog();
          })
          .ConfigureWebHostDefaults(webBuilder =>
          {
            webBuilder.UseStartup<Startup>();
          });
  }

您可以尝试编写自己的接收器。 Serilog提供的LogEvent类具有自定义

readonly Dictionary<string, LogEventPropertyValue> _properties
只读字典\u属性
你可以用它来传递一些旗帜。根据这些标志,接收器可以决定是否对您的消息进行操作


但这一切都在Serilog lvl。与ILogger的集成可能需要更多的考虑。

您可以通过设置将其存储在不同的接收器中

你可以用很多不同的方式过滤。对我有效的方法是按名称空间进行过滤,如:

var isController = Matching.FromSource("MyApp.Controllers");
var isService = Matching.FromSource("MyApp.Services");
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.RollingFile("d:/logs/recon-api-all-{Date}.log")
    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(isController)
        .WriteTo.RollingFile("d:/logs/recon-api-controller-{Date}.log"))
    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(isService)
        .WriteTo.MSSqlServer(connectionString: ""))
    .WriteTo.Logger(l => l
        .Filter.ByExcluding(e => isController(e) || iService(e))
        .WriteTo.RollingFile("d:/logs/recon-api-other-{Date}.log"))
    .CreateLogger();

您可以找到一个类似的帖子

重要的部分Serilog配置缺失。至于添加多个接收器,文档中对此进行了解释。你试过什么吗?您的配置是什么样子的?文档中也解释了过滤。如果要将不同记录器或不同级别的事件记录到不同的接收器,则需要在configuration@PanagiotisKanavos我添加了配置。我什么都没试过,因为我不知道怎么做。请从Serilog.Settings.Configuration repo查看。它显示了如何使用自己的最小级别设置指定多个记录器。请检查
配置基础中的和部分。我刚刚发现了以下内容:。如果您签出LogContext部分,您将看到一种临时丰富日志上下文的方法,从而使添加/删除这些标志标记变得容易。另一个有用的链接(我个人更喜欢这个链接):签出PropertyAgencyRicher类并使用它的Serilog,就像大多数日志库一样,为这项工作提供过滤器。按照设计,接收器并不意味着过滤任何东西,只是将事件写入特定目标。过滤器的任务是控制将哪些事件发送到每个接收器
var isController = Matching.FromSource("MyApp.Controllers");
var isService = Matching.FromSource("MyApp.Services");
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.RollingFile("d:/logs/recon-api-all-{Date}.log")
    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(isController)
        .WriteTo.RollingFile("d:/logs/recon-api-controller-{Date}.log"))
    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(isService)
        .WriteTo.MSSqlServer(connectionString: ""))
    .WriteTo.Logger(l => l
        .Filter.ByExcluding(e => isController(e) || iService(e))
        .WriteTo.RollingFile("d:/logs/recon-api-other-{Date}.log"))
    .CreateLogger();