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。

相關問題