在ASP.NET Core中分离应用程序级日志记录和框架级日志记录

时间:2016-01-27 13:45:03

标签: c# logging asp.net-core

如果我将日志记录服务添加到容器(在ASP.NET 5 RC1中):

cmd.exe

然后我可以在我的应用层使用Logger:

.\

但在这种情况下,我的logger.LogInformation()事件将与不重要的框架信息事件混合(根据每个请求最多10个开发人员!)。

ASP.NET 5 documentation states:

  

建议您在级别执行应用程序日志记录   您的应用程序及其API,而不是框架级别。该   框架已经内置了日志,可以简单地启用   设置适当的日志记录详细程度。

这是什么意思?这是否意味着不建议在客户端代码(app逻辑)中使用ILogger / ILoggerFactory?

将应用级别日志记录与框架级别日志记录分开的优雅解决方案是什么? 现在我使用Serilog并通过ContextSource过滤,但这远非优雅...

1 个答案:

答案 0 :(得分:2)

  

在应用程序及其API级别执行应用程序日志记录,而不是在框架级别执行   我认为这里的消息是你不应该尝试记录每个请求的细节,因为框架已经记录了这些细节。

在混合框架日志事件和应用程序日志事件时 - 文档还指出:

  

创建记录器时,必须提供类别名称。类别名称指定日志记录事件的来源。按照惯例,此字符串是分层的,类别由点(。)字符分隔。一些日志记录提供程序具有利用此约定的过滤支持,从而可以更轻松地查找感兴趣的日志记录输出。

默认情况下,当使用注入ILogger<MyAppLogicService>时,类别名称(如果类的全名)(带名称空间)。

因此,为了避免使用框架信息混乱您的日志,您可以通过仅包含与您的命名空间匹配的类别来过滤掉所有噪音。使用ConsoleLogger时,它看起来像这样:

loggerFactory.AddConsole((cat, level) => cat.StartsWith("mynamespace."));

我认为这类似于“使用Serilog并通过ContextSource过滤”。