

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 记录服务器消息（自定义服务器）
<a name="logging-server-messages-custom"></a>

您可以在日志文件中捕获来自 Amazon GameLift Servers 自定义服务器的自定义服务器消息。

**重要**  
每个游戏会话的日志文件大小有限制（请参阅 *AWS 一般参考*中的 [Amazon GameLift Servers 端点和配额](https://docs.aws.amazon.com/general/latest/gr/gamelift.html)）。游戏会话结束时，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](integration-server-sdk-cpp-ref-datatypes.md#integration-server-sdk-cpp-ref-dataypes-process)对象[LogParameters](integration-server-sdk-cpp-ref-datatypes.md#integration-server-sdk-cpp-ref-dataypes-log)的向量。

   ```
   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()](integration-server-sdk-cpp-ref-actions.md#integration-server-sdk-cpp-ref-processready) 时提供[ProcessParameters](integration-server-sdk-cpp-ref-datatypes.md#integration-server-sdk-cpp-ref-dataypes-process)对象。

   ```
   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](integration-server-sdk-csharp-ref-datatypes.md#integration-server-sdk-csharp-ref-dataypes-process)对象。[LogParameters](integration-server-sdk-csharp-ref-datatypes.md#integration-server-sdk-csharp-ref-dataypes-log)

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

1. 在调用 [ProcessReady()](integration-server-sdk-csharp-ref-actions.md#integration-server-sdk-csharp-ref-processready) 时提供[ProcessParameters](integration-server-sdk-csharp-ref-datatypes.md#integration-server-sdk-csharp-ref-dataypes-process)对象。

   ```
   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)中的。