我是C#的业余爱好者,正在开发一个. NETFramework4.7.2WPF应用程序,它的主要目的是允许用户运行类中的代码(所有这些都保存在程序中的一个“脚本”文件夹中),它将在嵌入式浏览器中执行某一组任务。我正在使用Serilog进行日志记录,而现在,我的程序在我的App.xaml.cs
文件中设置为将所有日志输出到“Logs”文件夹,如下所示:
Log.Logger = new LoggerConfiguration()
.WriteTo.File("./Logs/Log - .log", rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:HH:mm:ss.fff} [{Level:u3}] {Message}{NewLine}{Exception}")
.WriteTo.Debug()
.WriteTo.Console()
.MinimumLevel.Debug()
.CreateLogger();
字符串
该程序为保存在“Scripts”文件夹中的每个类生成一个数据文件夹,以存储输入/输出数据。这些类中的每个类还使用Serilog,以便在脚本运行时记录脚本中的各种内容。是否有一种方法可以让Serilog将这些脚本类中完成的任何日志保存到单独的日志文件中,然后将位于每个相应类的数据文件夹中?这样做的目的是将类似Log.Information("Finished task #1...");
的任何内容以及脚本中代码的任何错误保留在其自己的.log
文件中,以便用户以后可以在程序.
我已经研究过this question,希望找到一种基于类过滤日志记录的方法,但是,看起来我必须为我拥有的每个脚本手动添加以下代码块:
.WriteTo.Logger(lc => lc
.Filter.ByIncludingOnly(Matching.FromSource<MyClass>())
.WriteTo.RollingFile("logs/DBStats-{Date}.log", outputTemplate: "{Message}{NewLine}"))
型
这些脚本类会根据用户的意愿不断地添加和删除到程序中,所以我认为这是行不通的。我希望在任何脚本类中完成的任何日志都能自动写入该脚本的相应数据文件夹中。
我也研究过Serilog sub-loggers,但还没有想出用它来解决这个问题的方法。
1条答案
按热度按时间g0czyy6m1#
在配置记录器时,您可以做的是扫描所有脚本类,并为它们设置过滤器。
根据您的评论,我们假设您的类看起来像这样:
字符串
然后我们可以使用SourceContext来设置
Matching.FromSource()
过滤器。这将假设你的脚本类是在启动时加载的,并且你没有在运行时动态加载DLL。
型
注意:上面的代码是自包含的。在你的项目中实现它们之前,可以在一个新的控制台项目中随意使用它。