Avi*_*i-B 14 logging serilog entity-framework-core asp.net-core asp.net-core-logging
我有ASP.NET Core web api项目.现在我想记录错误和事件.我之前在我的项目中使用过ELMAH,但似乎elmah不适用于ASP.NET Core.我提到了 这个官方链接, 用于配置Microsoft提供的默认日志记录服务.我看不到如何将这些日志保存在文本文件或数据库中.
如果ASP.NET Core已经具有默认日志记录功能,我想知道为什么我应该使用其他工具,如elmah,log4net.因此,当我搜索实现默认日志记录以将日志保存在db或文本文件中的文章时,我找不到任何内容.有没有什么方法可以使用ASP.NET核心内置的日志记录支持将日志保存到文件中?
我目前正在使用Serilog,它运行良好,并且还下载了seq,用于在浏览器中优雅地显示日志.但是,我仍然想知道如何使用内置的asp.net核心日志记录功能实现相同的功能.
默认情况下,ASP.NET Core记录是基于标准.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>
Run Code Online (Sandbox Code Playgroud)
你正在寻找stdoutLogEnabled和stdoutLogFile.
stdoutLogEnabled如果为true,则指定进程的stdout和stderr
processPath将重定向到指定的文件stdoutLogFile.
和
stdoutLogFile指定
processPath将记录指定进程的stdout和stderr的相对或绝对文件路径.相对路径相对于站点的根目录.任何以'.'开头的路径 将相对于站点根目录,所有其他路径将被视为绝对路径.
另请参阅发布到IIS以获取有关ASP.NET Core模块的详细信息.
小智 3
我刚刚在有关 ASP.NET Core 日志记录的博客文章中对此主题进行了大量研究。我查看了内置日志记录以及 NLog、SeriLog 和 log4net。
基本上我发现内置的 ILoggerFactory 工作正常,但确实有一个明显的问题:它不会写入 file。它支持控制台、调试、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 /
我想说,如果您有非常简单的日志记录需求,您可以使用文件扩展名使内置日志记录工作。一旦您想要使用任何高级功能,例如控制输出格式、记录到外部服务、文件轮换、最大文件大小等,您将需要使用 NLog 或 Serilog。