11

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

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

我目前正在使用Serilog,它可以很好地工作,并且还可以下载seq在浏览器中正常显示日志。但是,我仍然想知道如何使用内置的asp.net核心日志记录功能实现相同功能。使用Serilog

日志文件:

日志使用了序列显示: enter image description here

回答

5

默认情况下,如果基于标准.NET核心ASP.NET核心记录抽象和所述抽象的实现。您提供的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如果为真,标准输出并为processPath规定将 重定向到 stdoutLogFile指定的文件 过程标准错误

而且

stdoutLogFile指定其输出和错误从processPath指定的进程 将被记录为 的相对或绝对文件路径。 相对路径相对于 网站的根。任何以'。'开头的路径将相对于站点根目录为 ,而所有其他路径 将被视为绝对路径。

也看到Publishing to IISASP.NET核心模块的详细信息。

+0

不要忘记添加文件夹以将日志包含到解决方案结构中,并将其列入project.json的publishOptions中https://docs.asp.net/en/latest/hosting/directory- structure.html。只要做到了这一点,并且工作得很好,并使用基于日期的命名约定命名文件(例如stdout_8440_201691620225.log)。有点过于冗长,但可以调整。 –

2

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

在写这篇文章的时候,使用Serilog或NLog来达到这个目的是需要的。

+0

Serilog.Sinks.MSSqlServer与asp.net核心一起工作吗?安装最新的beta版本预计serilog版本<2.0。 –

2

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

ASP.NET日志仍然是全新的,为什么其他框架和目标的记录器将开始出现。我相信基于文件的日志记录很快就会实现,ELMAH也将被移植到ASP.NET Core。欲了解更多信息,请查看我的博客文章:ASP.NET Core Logging Tutorial

1

我刚刚在ASP.NET Core logging上发表了一篇有关此主题的博客文章。我查看了内置的日志记录以及NLog,SeriLog和log4net。

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

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

相关问题