ASP.NET Core 1.0日志记录

时间:2016-06-30 09:53:17

标签: logging asp.net-core entity-framework-core serilog asp.net-core-logging

我有 ASP.NET Core web api 项目。现在我想记录错误和事件。我之前在我的项目中使用过ELMAH,但似乎elmah不适用于ASP.NET Core。我提到了this Official link来配置Microsoft提供的默认日志记录服务。我看不到如何将这些日志保存在文本文件或数据库中。

如果ASP.NET Core已经具有默认日志记录功能,我想知道为什么我应该使用其他工具,如elmah,log4net。因此,当我搜索实现默认日志记录以将日志保存在db或文本文件中的文章时,我无法找到任何内容。有没有什么方法可以使用ASP.NET核心内置的日志记录来保存日志文件?

我目前正在使用完美运行的Serilog,并且还下载了seq,以便在浏览器中优雅地显示日志。但是,我仍然想知道如何使用内置的asp.net核心日志记录功能实现相同的功能。

使用Serilog记录文件:

使用Seq:显示的日志 enter image description here

4 个答案:

答案 0 :(得分:7)

默认情况下, ASP.NET Core 日志记录,如果基于标准 .NET Core 抽象和所述抽象的实现。您提供的link正是您要遵循的用于使用日志记录服务的内容。这些将写入标准输出(输出窗口),例如在调试时。

您专门寻找的部分是web.config。请考虑以下事项:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" 
           resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" 
                forwardWindowsAuthToken="false" stdoutLogEnabled="true"
                stdoutLogFile="C:\temp\logs\log.log" />
  </system.webServer>
</configuration>

您正在寻找stdoutLogEnabled and stdoutLogFile

  

stdoutLogEnabled 如果为true,则为 stdout stderr   processPath中指定的流程将是   重定向到中指定的文件   stdoutLogFile

并且

  

stdoutLogFile 指定相对或绝对文件路径   哪个stdout和stderr来自这个过程   将记录processPath中指定的内容。   相对路径是相对于的根   现场。任何以'。'开头的路径都将是   相对于站点根目录和所有其他路径   将被视为绝对路径。

有关 ASP.NET Core 模块的详细信息,请参阅Publishing to IIS

答案 1 :(得分:3)

我刚刚就一篇关于ASP.NET Core日志的博客文章对这个主题进行了大量研究。我查看了内置日志记录以及NLog,SeriLog和log4net。

基本上我发现内置的ILoggerFactory工作正常,但确实有一个明显的问题:它不会写入文件。它支持Console,Debug,ETW和其他一些提供程序,但不支持文件。我假设因为当你不得不开始担心最大文件大小,旋转以及随之而来的所有其他东西时,文件非常复杂。

内置日志记录非常适合.NET内部,因为它们不需要写入文件,所以它不是.NET团队的限制。 Serilog和NLog都提供了很少的扩展来启用文件编写。当然,这些库还提供了更多功能。

Serilog的扩展需要一行代码并添加文件记录。您可以在此处阅读:https://github.com/serilog/serilog-extensions-logging-file

以下是关于ASP.NET核心日志记录的博文,如果它有帮助:https://stackify.com/asp-net-core-logging-what-changed/

我会说如果你有非常简单的日志记录需求,你可以使用File扩展来使内置日志记录工作。一旦你想要进入任何高级功能,如控制输出格式,记录到外部服务,文件轮换,最大文件大小等,你将需要使用NLog或Serilog。

答案 2 :(得分:2)

ASP.NET Core的日志记录子系统尚未提供文件记录器,但creating one is being discussed

在撰写本文时,为此目的使用Serilog或NLog是可行的方法。

答案 3 :(得分:2)

您无法将ASP.NET Core中的内置日志记录与ELMAH进行比较。 ASP.NET Core日志记录是一个简单的日志记录框架,您需要告诉它记录什么以及何时记录。 ELMAH自动捕获所有未处理的异常并记录有关失败请求的大量上下文信息。 Seq接收器实际上实现了一些这样的行为,它通过Seq提供了诸如Protocol,RequestId和类似的附加信息,但是这不是你将通过ASP.NET日志记录开箱即用的。

ASP.NET日志记录仍然是全新的,为什么其他框架和目标的记录器将开始出现。我确信基于文件的日志记录将很快实现,ELMAH也将被移植到ASP.NET Core。有关详细信息,请查看我的博文:ASP.NET Core Logging Tutorial