新手seo网站做什么类型好,域名购买后 怎么创建网站,网站模,丽水网站建设我有一个.NET Core 2.0应用程序#xff0c;可以在其中成功使用Serilog进行日志记录。现在#xff0c;我想将一些数据库性能统计信息记录到一个单独的接收器中(它们不是用于调试的#xff0c;这基本上是应用程序中所有其他记录的目的#xff0c;因此我想将它们分开)#xf… 我有一个.NET Core 2.0应用程序可以在其中成功使用Serilog进行日志记录。现在我想将一些数据库性能统计信息记录到一个单独的接收器中(它们不是用于调试的这基本上是应用程序中所有其他记录的目的因此我想将它们分开)并认为可以完成此操作 通过使用Log.ForContext()创建数据库统计记录器。我不知道如何使用我的appsettings.json配置Serilog以将调试日志记录到一个接收器而将数据库统计信息记录到另一个接收器我希望可以做类似的事情Serilog: { WriteTo: [ { Name:RollingFile, pathFormat:logs/Log-{Date}.log, Filter: { ByExcluding:FromSource(MyClass) } }, { Name:RollingFile, pathFormat:logs/DBStat-{Date}.log, Filter: { ByIncludingOnly:FromSource(MyClass) } } ]}对我而言配置的Filter部分纯属猜测。是否可以使用我的配置文件管理器执行此操作还是需要在我的Startup.cs文件中的代码中执行此操作编辑我已经使用CAPI使它工作但仍然想使用JSON配置来弄清楚它Log.Logger new LoggerConfiguration() .WriteTo.Logger(lc lc .Filter.ByExcluding(Matching.FromSourceMyClass()) .WriteTo.LiterateConsole()) .WriteTo.Logger(lc lc .Filter.ByExcluding(Matching.FromSourceMyClass()) .WriteTo.RollingFile(logs/DebugLog-{Date}.log)) .WriteTo.Logger(lc lc .Filter.ByIncludingOnly(Matching.FromSourceMyClass()) .WriteTo.RollingFile(logs/DBStats-{Date}.log, outputTemplate:{Message}{NewLine})) .CreateLogger(); 相关讨论我今天完成了这项工作并认为我会提供一个正确的答案因为我花了很多篇文章问题和其他页面来解决问题。拥有所有日志非常有用但是我还想单独记录我的API代码并省略Microsoft.命名空间日志。进行此操作的JSON配置如下所示 Serilog: { Using: [Serilog.Sinks.File ], MinimumLevel:Debug, WriteTo: [ { Name:File, Args: { path:/var/logs/system.log, ... //other unrelated file config } }, { Name:Logger, Args: { configureLogger: { WriteTo: [ { Name:File, Args: { path:/var/logs/api.log, ... //other unrelated file config } } ], Filter: [ { Name:ByExcluding, Args: { expression:StartsWith(SourceContext, Microsoft.) } } ] } } } ], Enrich: [FromLogContext,WithMachineName,WithThreadId ] ... //Destructure and other config }顶级WriteTo是第一个简单的全局接收器。所有日志事件都将写入此内容。如果在与此相同的级别上添加Filter部分它将影响所有已配置的WriteTo元素。然后我将另一个WriteTo配置为Logger(不是File)但是Args看上去与此不同并且具有一个configureLogger元素其作用与顶层的Serilog相同即也就是说它是子记录器的顶层。这意味着您可以轻松地将此配置拆分为一个单独的文件并将其另外添加到配置构建器中(请参阅底部)。从这里开始此子记录器的工作方式相同您可以配置多个WriteTo并且此级别上的Filter元素将仅影响此子记录器。只需将更多Name:Logger元素添加到顶层WriteTo部分并分别为每个元素设置过滤器。注意同样重要的是要注意即使您在config中完成所有这些操作并且没有在代码中引用Serilog.Filters.Expressions包的任何一点您仍然必须向该包添加NuGet引用。没有软件包参考它将无法正常工作。关于拆分配置如果必须添加更多的记录器为了清楚起见我一定会将不同的记录器分成单独的文件例如appsettings.json Serilog: { Using: [Serilog.Sinks.File ], MinimumLevel:Error, WriteTo: [ { Name:File, Args: { path:/var/logs/system.log, ... } }, { Name:Logger, Args: { configureLogger: {} // leave this empty } } ], Enrich: [FromLogContext,WithMachineName,WithThreadId ], ...apilogger.json{ Serilog:WriteTo:1:Args:configureLogger: { //notice this key WriteTo: [ { Name:File, Args: { path:/var/logs/api_separateFile.log, ... } } ], Filter: [ { Name:ByExcluding, Args: { expression:StartsWith(SourceContext, Microsoft.) } } ] }}然后调整我的IWebHost构建器以包括其他配置 WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) { config.AddJsonFile(apilogger.json, optional: false, reloadOnChange: false); }) .UseStartupStartup();这样更易于理解阅读和维护。