

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

# 記錄伺服器訊息 （自訂伺服器）
<a name="logging-server-messages-custom"></a>

您可以從日誌檔案中的自訂伺服器擷取Amazon GameLift Servers自訂伺服器訊息。

**重要**  
每個遊戲工作階段的日誌檔案大小都有限制 （請參閱 中的[Amazon GameLift Servers端點和配額](https://docs.aws.amazon.com/general/latest/gr/gamelift.html)*AWS 一般參考*)。當遊戲工作階段結束時， 會將伺服器日誌Amazon GameLift Servers上傳至 Amazon Simple Storage Service (Amazon S3)。 Amazon GameLift Servers不會上傳超過限制的日誌。日誌可以快速成長並超過大小限制。您應該監控日誌，並將日誌輸出限制為僅必要訊息。

## 設定自訂伺服器的記錄
<a name="configuring-logging-for-custom-servers"></a>

使用Amazon GameLift Servers自訂伺服器時，您可以編寫自己的程式碼來執行記錄，這是您在伺服器程序組態中設定的一部分。 Amazon GameLift Servers會使用記錄組態來識別它必須在每個遊戲工作階段結束時上傳至 S3 的檔案。

下列指示說明如何使用簡化的程式碼範例來設定記錄：

------
#### [ C\$1\$1 ]

**設定記錄 (C\$1\$1)**

1. 建立字串向量，其為遊戲伺服器日誌檔案的目錄路徑。

   ```
   std::string serverLog("serverOut.log");        // Example server log file
   std::vector<std::string> logPaths;
   logPaths.push_back(serverLog);
   ```

1. 提供向量做為 ProcessParameters 物件的 [LogParameters](integration-server-sdk-cpp-ref-datatypes.md#integration-server-sdk-cpp-ref-dataypes-log)。 [ProcessParameters](integration-server-sdk-cpp-ref-datatypes.md#integration-server-sdk-cpp-ref-dataypes-process) 

   ```
   Aws::GameLift::Server::ProcessParameters processReadyParameter = Aws::GameLift::Server::ProcessParameters(
       std::bind(&Server::onStartGameSession, this, std::placeholders::_1),
       std::bind(&Server::onProcessTerminate, this),
       std::bind(&Server::OnHealthCheck, this),
       std::bind(&Server::OnUpdateGameSession, this),
       listenPort,
       Aws::GameLift::Server::LogParameters(logPaths));
   ```

1. 當您呼叫 ProcessReady() 時，請提供 [ProcessParameters](integration-server-sdk-cpp-ref-datatypes.md#integration-server-sdk-cpp-ref-dataypes-process) 物件。 [ProcessReady](integration-server-sdk-cpp-ref-actions.md#integration-server-sdk-cpp-ref-processready)

   ```
   Aws::GameLift::GenericOutcome outcome = 
      Aws::GameLift::Server::ProcessReady(processReadyParameter);
   ```

如需更完整的範例，請參閱 [ProcessReady()](integration-server-sdk-cpp-ref-actions.md#integration-server-sdk-cpp-ref-processready)。

------
#### [ C\$1 ]

**設定記錄 (C\$1)**

1. 建立做為遊戲伺服器日誌檔案目錄路徑的字串清單。

   ```
   List<string> logPaths = new List<string>();
   logPaths.Add("C:\\game\\serverOut.txt");     // Example of a log file that the game server writes
   ```

1. 提供您的清單做為 ProcessParameters 物件的 [LogParameters](integration-server-sdk-csharp-ref-datatypes.md#integration-server-sdk-csharp-ref-dataypes-log)。 [ProcessParameters](integration-server-sdk-csharp-ref-datatypes.md#integration-server-sdk-csharp-ref-dataypes-process) 

   ```
   var processReadyParameter = new ProcessParameters(
       this.OnGameSession,
       this.OnProcessTerminate,
       this.OnHealthCheck,
       this.OnGameSessionUpdate,
       port,
       new LogParameters(logPaths));
   ```

1. 當您呼叫 ProcessReady() 時，請提供 [ProcessParameters](integration-server-sdk-csharp-ref-datatypes.md#integration-server-sdk-csharp-ref-dataypes-process) 物件。 [ProcessReady](integration-server-sdk-csharp-ref-actions.md#integration-server-sdk-csharp-ref-processready)

   ```
   var processReadyOutcome =
      GameLiftServerAPI.ProcessReady(processReadyParameter);
   ```

如需更完整的範例，請參閱 [ProcessReady()](integration-server-sdk-csharp-ref-actions.md#integration-server-sdk-csharp-ref-processready)。

------

## 寫入日誌
<a name="writing-to-logs-for-custom-servers"></a>

您的日誌檔案會在伺服器程序啟動後存在。您可以使用任何方法來寫入檔案，以寫入日誌。若要擷取伺服器的所有標準輸出和錯誤輸出，請將輸出串流重新映射至日誌檔案，如下列範例所示：

------
#### [ C\$1\$1 ]

```
std::freopen("serverOut.log", "w+", stdout);
std::freopen("serverErr.log", "w+", stderr);
```

------
#### [ C\$1 ]

```
Console.SetOut(new StreamWriter("serverOut.txt"));
Console.SetError(new StreamWriter("serverErr.txt"));
```

------

## 存取伺服器日誌
<a name="accessing-logs-for-custom-servers"></a>

日誌存取因機群類型而異：

### 受管 EC2 機群
<a name="accessing-logs-managed-ec2"></a>

當遊戲工作階段結束時， Amazon GameLift Servers會自動將日誌存放在 S3 儲存貯體中，並保留 14 天。若要取得遊戲工作階段日誌的位置，您可以使用 [GetGameSessionLogUrl](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetGameSessionLogUrl.html) API 操作。若要下載日誌，請使用 操作傳回的 URL。

或者，您可以透過設定遊戲伺服器，將日誌直接傳送到您偏好的記錄服務或儲存位置，來設定自己的記錄解決方案。如需詳細資訊，請參閱[將Amazon GameLift Servers託管遊戲伺服器連接到其他 AWS 資源](gamelift-sdk-server-resources.md)。

### 容器機群
<a name="accessing-logs-containers"></a>

容器機群會從所有容器擷取標準輸出和錯誤串流。您可以使用下列其中一個選項來設定記錄：
+ 在指定的日誌群組中將容器輸出儲存為 CloudWatch 日誌串流
+ 將容器輸出儲存至 S3 儲存貯體
+ 關閉記錄 （不會儲存容器輸出）

如需在建立容器機群時設定記錄選項的詳細資訊，請參閱 Amazon GameLift Servers API 參考中的 [LogConfiguration](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_CreateContainerFleet.html#gameliftservers-CreateContainerFleet-request-LogConfiguration)。