

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 NLog 在 Amazon CloudWatch Logs 中設定 .NET 應用程式的記錄
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog"></a>

*Amazon Web Services 的聖胡島和羅布希爾 (AWS)*

## 總結
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-summary"></a>

此模式說明如何使用 NLog 開放原始碼記錄架構，在 [Amazon CloudWatch Logs ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)中記錄 .NET 應用程式用量和事件。在 CloudWatch 主控台中，您可以近乎即時地檢視應用程式的日誌訊息。您也可以設定[指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html)和設定[警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ConsoleAlarms.html)，以便在超過指標閾值時通知您。使用 CloudWatch Application Insights，您可以檢視自動或自訂儀表板，以顯示受監控應用程式的潛在問題。CloudWatch Application Insights 旨在協助您快速隔離應用程式和基礎設施的持續問題。

若要將日誌訊息寫入 CloudWatch Logs，請將 `AWS.Logger.NLog` NuGet 套件新增至 .NET 專案。然後，您更新 `NLog.config` 檔案以使用 CloudWatch Logs 做為目標。

## 先決條件和限制
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶
+ 符合下列條件的 .NET Web 或主控台應用程式：
  + 使用支援的 .NET Framework 或 .NET Core 版本。如需詳細資訊，請參閱*產品版本*。
  + 使用 NLog 將日誌資料傳送至 Application Insights。
+ 為 AWS 服務建立 IAM 角色的許可。如需詳細資訊，請參閱[服務角色許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#id_roles_create_service-permissions)。
+ 將角色傳遞至 AWS 服務的許可。如需詳細資訊，請參閱[授予使用者將角色傳遞至 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

**產品版本**
+ .NET Framework 3.5 版或更新版本
+ .NET Core 1.0.1、2.0.0 或更新版本

## Architecture
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-architecture"></a>

**目標技術堆疊**
+ NLog
+ Amazon CloudWatch Logs

**目標架構**

![NLog 將 .NET 應用程式日誌資料寫入 Amazon ClodWatch Logs 的架構圖。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/0ac9c3ad-2a28-415f-afc3-7fe3494b2b63/images/daea9f2f-7242-4ed2-843e-655d843dcfdf.png)


1. .NET 應用程式會將日誌資料寫入 NLog 記錄架構。

1. NLog 會將日誌資料寫入 CloudWatch Logs。

1. 您可以使用 CloudWatch 警示和自訂儀表板來監控 .NET 應用程式。

## 工具
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-tools"></a>

**AWS 服務**
+ [Amazon CloudWatch Application Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html) 可協助您觀察應用程式和基礎 AWS 資源的運作狀態。
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 可協助您集中所有系統、應用程式和 AWS 服務的日誌，以便您可以監控日誌並將其安全地存檔。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 可透過控制已驗證並獲授權使用的人員，協助您安全地管理對 AWS 資源的存取。
+ [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html) 是一組 PowerShell 模組，可協助您從 PowerShell 命令列對 AWS 資源執行指令碼操作。

**其他工具**
+ [Logger.NLog](https://www.nuget.org/packages/AWS.Logger.NLog) 是 NLog 目標，可將日誌資料記錄到 CloudWatch Logs。
+ [NLog](https://nlog-project.org/) 是 .NET 平台的開放原始碼記錄架構，可協助您將日誌資料寫入目標，例如資料庫、日誌檔案或主控台。
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/) 是在 Windows、Linux 和 macOS 上執行的 Microsoft 自動化和組態管理程式。
+ [Visual Studio](https://docs.microsoft.com/en-us/visualstudio/get-started/visual-studio-ide?view=vs-2022) 是一種整合的開發環境 (IDE)，其中包含編譯器、程式碼完成工具、圖形設計師和其他支援軟體開發的功能。

## 最佳實務
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-best-practices"></a>
+ 設定目標日誌群組的[保留政策](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#SettingLogRetention)。這必須在 NLog 組態之外完成。在預設情況下，日誌資料會無限期存放於 CloudWatch Logs。
+ 遵守[管理 AWS 存取金鑰的最佳實務](https://docs.aws.amazon.com/accounts/latest/reference/credentials-access-keys-best-practices.html)。

## 史詩
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-epics"></a>

### 設定存取和工具
<a name="set-up-access-and-tools"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立 IAM 政策。 | 請遵循 IAM 文件中的[使用 JSON 編輯器建立政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)中的指示。輸入下列 JSON 政策，該政策具有允許 CloudWatch Logs 讀取和寫入日誌所需的最低權限許可。<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "logs:CreateLogGroup",<br />                "logs:CreateLogStream",<br />                "logs:GetLogEvents",<br />                "logs:PutLogEvents",<br />                "logs:DescribeLogGroups",<br />                "logs:DescribeLogStreams",<br />                "logs:PutRetentionPolicy"<br />            ],<br />            "Resource": [<br />                "*"<br />            ]<br />        }<br />    ]<br />}</pre> | AWS 管理員、AWS DevOps | 
| 建立 IAM 角色。 | 遵循 IAM 文件中[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)中的指示。選取您先前建立的政策。這是 CloudWatch Logs 執行記錄動作所擔任的角色。 | AWS 管理員、AWS DevOps | 
| 設定適用於 PowerShell 的 AWS 工具。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.html) | 一般 AWS | 

### 設定 NLog
<a name="configure-nlog"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 安裝 NuGet 套件。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.html) | 應用程式開發人員 | 
| 設定記錄目標。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.html)如需範例組態檔案，請參閱此模式[的其他資訊](#configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-additional)一節。當您執行應用程式時，NLog 會撰寫日誌訊息，並將其傳送至 CloudWatch Logs。 | 應用程式開發人員 | 

### 驗證和監控日誌
<a name="validate-and-monitor-logs"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 驗證記錄。 | 遵循 [ CloudWatch Logs 文件中檢視傳送至 CloudWatch Logs 的日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)中的指示。 CloudWatch 驗證日誌事件是否正在為 .NET 應用程式記錄。如果未記錄日誌事件，請參閱此模式中的[故障診斷](#configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-troubleshooting)一節。 | 一般 AWS | 
| 監控 .NET 應用程式堆疊。 | 根據您的使用案例，視需要在 CloudWatch 中設定監控。您可以使用 [CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)、[CloudWatch Metrics Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/query_with_cloudwatch-metrics-insights.html) 和 [CloudWatch Application Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html) 來監控 .NET 工作負載。您也可以設定[警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)，以便接收警示，也可以建立自訂[儀表板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)，從單一檢視監控工作負載。 | 一般 AWS | 

## 疑難排解
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-troubleshooting"></a>


| 問題 | 解決方案 | 
| --- | --- | 
| 日誌資料不會顯示在 CloudWatch Logs 中。 | 請確定 IAM 政策已連接至 CloudWatch Logs 擔任的 IAM 角色。如需說明，請參閱《[Epics](#configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-epics)》中的*設定存取和工具*一節。 | 

## 相關資源
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-resources"></a>
+ [使用日誌群組和日誌串流 ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)(CloudWatch Logs 文件）
+ [Amazon CloudWatch Logs 和 .NET Logging Framework ](https://aws.amazon.com/blogs/developer/amazon-cloudwatch-logs-and-net-logging-frameworks/)(AWS 部落格文章）

## 其他資訊
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-additional"></a>

以下是範例`NLog.config`檔案。

```
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
  <nlog>
    <extensions>
      <add assembly="NLog.AWS.Logger" />
    </extensions>
    <targets>
      <target name="aws" type="AWSTarget" logGroup="NLog.TestGroup" region="us-east-1" profile="demo"/>
    </targets>
    <rules>
      <logger name="*" minlevel="Info" writeTo="aws" />
    </rules>    
  </nlog>
</configuration>
```