ASP.NET Core 1.0日志记录

问题描述 投票:14回答:4

我有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显示的日志

logging asp.net-core entity-framework-core serilog asp.net-core-logging
4个回答
3
投票

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

基本上我发现内置ILoggerFactory工作正常但确实有一个明显的问题:它不会写入文件。它支持Console,Debug,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-changed/

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


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,则processPath中指定的进程的stdout和stderr将重定向到stdoutLogFile中指定的文件。

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

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


2
投票

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

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


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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.