C# Serilog使用MicrosoftiLogger-从.NETCore中的一个代码记录到不同的位置
我正在通过Microsoft.Extensions.Logging.ILogger使用serilog。 这是我在Program.cs中的配置: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()
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();