啟用並設定 App Service 應用程式記錄
在本單元中,我們將查看應用程式記錄如何能協助您的 Web 應用程式,並說明如何啟用應用程式記錄。
何謂應用程式記錄?
Azure 提供內建診斷的應用程式記錄。 應用程式記錄是應用程式程式碼中執行階段追蹤陳述式的輸出。 例如,您可能想要檢查程式碼中的一些邏輯,方法是透過新增追蹤來在處理特定函式時顯示。 或者,您可能只想在發生特定層級錯誤時看到記錄的訊息。 應用程式記錄主要供處於生產階段前的應用程式使用,並用於棘手問題,由於過度記錄可能會降低效能並快速消耗儲存體。 基於此原因,針對檔案系統的記錄將於 12 小時後自動停用。
應用程式記錄具有規模上的限制,這主要是因為會使用檔案以儲存已記錄的輸出。 如果您有某個應用程式的多個執行個體,且所有執行個體皆共用相同的儲存體,則來自不同執行個體的訊息可能會相互交錯,進一步提升疑難排解的難度。 如果每個執行個體都有屬於自己的記錄檔,則會有多個記錄檔,這同樣會提升對執行個體特定問題進行疑難排解的難度。
可透過 Azure App Service 取得的記錄類型,會依應用程式的程式碼架構,以及該應用程式是在 Windows 或 Linux 應用程式主機上執行而定。
ASP.NET
ASP.NET 應用程式僅會在 Windows 應用程式服務上執行。 如果要將資訊記錄至應用程式診斷記錄,請使用 System.Diagnostics.Trace
類別。 有四個追蹤層級可供使用,其與 Azure 入口網站中所顯示的 error
、warning
、information
及 verbose
記錄層級相互關聯:
- Trace.TraceError("Message"); // 寫入錯誤訊息
- Trace.TraceWarning ("Message");// 寫入警告訊息
- Trace.TraceInformation ("Message");// 寫入資訊訊息
- Trace.WriteLine ("Message");// 寫入詳細資訊訊息
ASP.NET Core 應用程式
ASP.NET Core 應用程式可以在 Windows 或 Linux 上執行。 如果要將資訊記錄至 Azure 應用程式記錄,請使用 logger factory 類別,然後使用六個記錄層級中的其中之一:
- logger.LogCritical ("Message");// 於記錄層級 5 寫入危急訊息
- logger.LogError ("Message");// 於記錄層級 4 寫入錯誤訊息
- logger.LogWarning ("Message");// 於記錄層級 3 寫入警告訊息
- logger.LogInformation ("Message");// 於記錄層級 2 寫入資訊訊息
- logger.LogDebug ("Message");// 於記錄層級 1 寫入偵錯訊息
- logger.LogTrace ("Message");// 於記錄層級 0 寫入詳細追蹤訊息
針對 Windows 上的 ASP.NET Core 應用程式,這些訊息會以下列方式和 Azure 入口網站中的篩選相關聯:
- 層級 4 和 5 為錯誤訊息。
- 層級 3 為警告訊息。
- 層級 2 為資訊訊息。
- 層級 0 和 1 為詳細資訊訊息。
針對 Linux 上的 ASP.NET Core 應用程式,系統只記錄錯誤訊息 (層級 4 和 5)。
Node.js 應用程式
針對以指令碼為基礎的 Web 應用程式 (例如 Windows 上或 Linux 上的 Node.js 應用程式),您可以使用 console() 方法來啟用應用程式記錄:
- console.error("Message"); // 將訊息寫入至 STDERR。
- console.log("Message"); // 將訊息寫入至 STDOUT。
這兩種類型的訊息都會被寫入至 Azure App Service 錯誤層級的記錄檔。
Windows 與 Linux 主機之間在記錄上的差異
為了將訊息路由傳送至記錄檔,Azure Web 應用程式會使用 Internet Information Services (IIS) Web 伺服器。 由於以 Windows 為基礎的 Web 應用程式皆為已妥善建立的 Azure 服務,且適用於 ASP.NET 應用程式的傳訊功能已與基礎的 IIS 服務緊密整合,因此 Windows 應用程式會受益於豐富的記錄基礎結構。 針對其他應用程式,記錄選項可能受限於開發平台,即使是在 Windows 應用程式服務上執行也一樣。
用於應用程式容器的 Docker 映像,會決定以 Linux 為基礎的指令碼應用程式 (例如 Node) 可用的記錄功能。 基本記錄,例如使用針對 STDERR 或 STDOUT 的重新導向會使用 Docker 記錄。 更豐富的記錄功能將仰賴於基礎映像,以及是否正在執行 PHP、Perl、Ruby 等。 如果要下載由 IIS 提供給 Windows 應用程式的對等 Web 應用程式記錄,可能會要求使用 SSH 連線至您的容器。
下列資料表摘要說明適用於常見應用程式之環境與主機的記錄支援。
應用程式環境 | Host | 記錄層級 | 儲存位置 |
---|---|---|---|
ASP.NET | Windows | 錯誤、警告、資訊、詳細資訊 | 檔案系統、Blob 儲存體 |
ASP.NET Core | Windows | 錯誤、警告、資訊、詳細資訊 | 檔案系統、Blob 儲存體 |
ASP.NET Core | Linux | 錯誤 | 檔案系統 |
Node.js | Windows | 錯誤 (STDERR)、資訊 (STDOUT)、警告、詳細資訊 | 檔案系統、Blob 儲存體 |
Node.js | Linux | 錯誤 | 檔案系統 |
Java | Linux | 錯誤 | 檔案系統 |
應用程式診斷的替代方案
Azure Application Insights 是一項網站延伸模組,其提供更多的效能監視功能,例如詳細的使用量和效能資料。 Application Insights 專為生產環境應用程式部署而設計,且可能會是實用的開發工具。 其可搭配數種應用程式開發環境運作;無論應用程式是 ASP.NET 或 Node,皆能提供相同的豐富遙測及效能資料的集合。 不過,如果要運用 Application Insights,您必須使用 App Insights SDK,藉以在應用程式內包含特定的程式碼。 Application Insights 也是可計費的服務。 因此依據應用程式部署及所收集資料的規模,您可能需要針對例行性成本進行規劃。
您也可以檢視應用程式的計量,其可以協助您側寫應用程式的運作方式。 這些計數器在生產環境與開發中很有用。 您可以檢視 CPU、記憶體、網路及檔案系統的使用情形,並設定會在計數器觸發特定閾值時所生效的警示。 針對計量的計費是由應用程式服務方案階層所涵蓋。
使用 Azure 入口網站啟用記錄
在入口網站中,可以透過 Web 應用程式的 [診斷記錄] 窗格管理應用程式記錄。
如果要針對 Web 應用程式的檔案系統來啟用應用程式記錄,請將 [應用程式記錄 (檔案系統)] 設定為 [開啟],然後將 [層級] 設定為 [錯誤]、[警告]、[資訊] 或 [詳細資訊]。 檔案系統的記錄將於 12 小時後自動重設為 [關閉]。
若要針對 Blob 儲存體容器啟用應用程式記錄,請將 [應用程式記錄 (Blob)] 設為 [開啟],然後選取儲存體帳戶和容器。 儲存體帳戶和 Web 應用程式必須在相同 Azure 區域中建立。 接著,將 [層級] 設定為 [錯誤]、[警告]、[資訊] 或 [詳細資訊]。
注意
Linux 應用程式記錄檔無法儲存至 Blob 儲存體。
記錄至 Blob 儲存體時,您必須同時設定 [保留期限]。 不同於檔案系統記錄檔,Blob 記錄預設永遠不會刪除。 保留期間選項表示早於指定天數的任何記錄會遭到刪除。
在設定記錄後,選取 [儲存]。
使用 Azure CLI 來啟用記錄
如果要針對檔案系統來啟用應用程式記錄,請執行此命令。
az webapp log config --application-logging filesystem --level verbose --name <app-name> --resource-group <resource-group-name>
例如,如果要針對適用於名為 contosofashions123 之應用程式的檔案系統來啟用記錄,並擷取所有訊息,請執行此命令。
az webapp log config --application-logging filesystem --level verbose --name contosofashions123 --resource-group contosofashionsRG
目前沒有任何方法可以使用 Azure CLI 命令來停用應用程式記錄。 不過,下列命令只會將檔案系統記錄重設為錯誤層級。
az webapp log config --application-logging off --name <app-name> --resource-group <resource-group-name>
若要檢視應用程式目前的記錄狀態,請使用這個命令。
az webapp log show --name <app-name> --resource-group <resource-group-name>