如果我将日志记录服务添加到容器(在ASP.NET 5 RC1中):
services.AddSingleton<ILoggerFactory>();
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
//or just services.AddLogging();
Run Code Online (Sandbox Code Playgroud)
然后我可以在我的应用层中使用Logger:
class MyAppLogicService
{
public MyAppLogicService(ILogger<MyAppLogicService> logger)
{
logger.LogInformation("Hey");
}
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我的logger.LogInformation()事件将与不重要的框架信息事件混合(根据每个请求最多10个开发人员!).
建议您在应用程序及其API级别执行应用程序日志记录,而不是在框架级别执行.该框架已经内置了日志记录,只需设置适当的日志记录详细级别即可启用该日志.
这是什么意思?这是否意味着不建议在客户端代码(app logic)中使用ILogger/ILoggerFactory?
什么是将应用程序级日志记录与框架级日志记录分开的优雅解决方案 现在我正在使用Serilog并通过ContextSource过滤,但这远非优雅......
它看起来像Serilog文件/ RollingFile沉刷新每个记录通话后流。
这不是基本性能受到影响吗?例如,Nlog 有某种 AsyncWrapper用于排队日志事件并使用后台线程批量写入它们。
如果我想在使用文件接收器时最小化延迟,有什么解决方案?