我有ASP.NET Core web api項目。現在我想記錄錯誤和事件。我之前在我的項目中使用過ELMAH,但似乎elmah不適用於ASP.NET Core。我提到了這個官方鏈接,用於配置Microsoft提供的默認日誌記錄服務。我看不到如何將這些日誌保存在文本文件或數據庫中。

如果ASP.NET Core已經具有默認日誌記錄功能,我想知道為什麼我應該使用其他工具,如elmah,log4net。因此,當我搜索實現默認日誌記錄以將日誌保存在db或文本文件中的文章時,我找不到任何內容。有沒有什麼方法可以使用ASP.NET核心內置的日誌記錄支持將日誌保存到文件中?

我目前正在使用完美運行的Serilog,並且還下載了seq,以便在瀏覽器中優雅地顯示日誌。但是,我仍然想知道如何使用內置的asp.net核心日誌記錄功能實現相同的功能。

使用Serilog的日誌文件:

使用Seq顯示的日誌: 在此處輸入圖像描述

一般承認的答案

關於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-c​​hanged/

我想說如果你有非常簡單的日誌記錄需求,你可以使用File擴展來使內置日誌記錄工作。只要您想要進入任何高級功能,如控制輸出格式,記錄到外部服務,文件輪換,最大文件大小等,您將需要使用NLog或Serilog。


熱門答案

默認情況下, 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>

您正在尋找stdoutLogEnabledstdoutLogFile

stdoutLogEnabled如果為true,則processPath中指定的進程的stdoutstderr將重定向到stdoutLogFile指定的文件。

stdoutLogFile指定將記錄processPath中指定的進程的stdout和stderr的相對或絕對文件路徑。相對路徑相對於站點的根目錄。任何以“。”開頭的路徑都將相對於站點根目錄,所有其他路徑將被視為絕對路徑。

另請參閱發佈到IIS以獲取有關ASP.NET Core模塊的詳細信息。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因