15

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

如果 ASP.NET Core 已经具有默认的日志记录功能,我想知道为什么要使用其他工具,例如 elmah、log4net。因此,当我再次搜索实现默认日志记录以将日志保存在数据库或文本文件中的文章时,我找不到任何内容。有什么方法可以使用 ASP.NET 核心内置的日志记录支持将日志保存在文件中?

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

使用 Serilog 的日志文件:

使用 Seq 显示的日志: 在此处输入图像描述

4

4 回答 4

8

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

您正在寻找的部分是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>

您正在寻找stdoutLogEnabledandstdoutLogFile

stdoutLogEnabled如果为 true,则 中指定进程的stdoutstderrprocessPath将被重定向到 中指定的文件 stdoutLogFile

stdoutLogFile指定processPath将记录来自指定进程的 stdout 和 stderr 的相对或绝对文件路径。相对路径是相对于站点的根目录的。任何以“.”开头的路径 将相对于站点根目录,所有其他路径将被视为绝对路径。

有关ASP.NET Core模块的详细信息,另请参阅发布到 IIS 。

于 2016-06-30T11:58:12.803 回答
3

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

基本上我发现内置的 ILoggerFactory 工作正常,但确实有一个明显的问题:它不会写入文件。它支持控制台、调试、ETW 和其他一些提供程序,但不支持文件。我假设是因为当您不得不开始担心最大文件大小、旋转以及所有其他相关内容时,文件非常复杂。

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

Serilog 的扩展需要一行代码,它添加了文件日志记录。你可以在这里阅读:https ://github.com/serilog/serilog-extensions-logging-file

如果有帮助,这是我关于 ASP.NET Core 日志记录的博客文章:https ://stackify.com/asp-net-core-logging-what-c​​hanged/

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

于 2017-02-14T00:51:26.190 回答
2

ASP.NET Core 的日志子系统尚未提供文件记录器,但正在讨论创建一个

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

于 2016-06-30T21:12:49.870 回答
2

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

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

于 2016-07-07T07:11:16.010 回答