记录服务器消息(自定义服务器) - Amazon GameLift Servers

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

记录服务器消息(自定义服务器)

您可以在日志文件中捕获来自Amazon GameLift Servers自定义服务器的自定义服务器消息。要了解有关登录的信息 Amazon GameLift ServersRealtime,请参阅记录服务器消息 (Amazon GameLift ServersRealtime)

重要

每个游戏会话的日志文件大小有限制(请参阅中的Amazon GameLift Servers端点和配额 AWS 一般参考)。游戏会话结束后,将服务器日志Amazon GameLift Servers上传到亚马逊简单存储服务 (Amazon S3) Service。 Amazon GameLift Servers不会上传超过限制的日志。日志的增长速度可能非常快,并且会超过大小限制。您应该监控日志,将日志输出限制为仅显示必要的消息。

为自定义服务器配置日志记录

使用Amazon GameLift Servers自定义服务器,您可以编写自己的代码来执行日志记录,并将其配置为服务器进程配置的一部分。 Amazon GameLift Servers使用您的日志配置来识别在每个游戏会话结束时必须上传到 S3 的文件。

以下说明阐述了如何使用简化的代码示例配置日志记录:

C++
配置日志记录 (C++)
  1. 创建字符串矢量,这些字符串是游戏服务器日志文件的目录路径。

    std::string serverLog("serverOut.log"); // Example server log file std::vector<std::string> logPaths; logPaths.push_back(serverLog);
  2. 提供你的矢量作为你的ProcessParameters对象LogParameters的向量。

    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));
  3. 在调用 ProcessReady() 时提供ProcessParameters对象。

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

有关更完善的示例,请参阅ProcessReady()

C#
配置日志记录 (C#)
  1. 创建字符串列表,这些字符串是游戏服务器日志文件的目录路径。

    List<string> logPaths = new List<string>(); logPaths.Add("C:\\game\\serverOut.txt"); // Example of a log file that the game server writes
  2. 提供您的列表作为您的ProcessParameters对象。LogParameters

    var processReadyParameter = new ProcessParameters( this.OnGameSession, this.OnProcessTerminate, this.OnHealthCheck, this.OnGameSessionUpdate, port, new LogParameters(logPaths));
  3. 在调用 ProcessReady() 时提供ProcessParameters对象。

    var processReadyOutcome = GameLiftServerAPI.ProcessReady(processReadyParameter);

有关更完善的示例,请参阅ProcessReady()

写入日志

您的日志文件在服务器进程启动后就会存在。您可以使用任意方法写入日志来写入文件。要捕获服务器的所有标准输出和错误输出,请将输出流重新映射到日志文件,如以下示例所示:

C++
std::freopen("serverOut.log", "w+", stdout); std::freopen("serverErr.log", "w+", stderr);
C#
Console.SetOut(new StreamWriter("serverOut.txt")); Console.SetError(new StreamWriter("serverErr.txt"));

获取服务器日志

日志访问权限因队列类型而异:

托管 EC2 车队

游戏会话结束后,Amazon GameLift Servers会自动将日志存储在 S3 存储桶中并将其保留 14 天。要获取游戏会话日志的位置,可以使用 GetGameSessionLogUrlAPI 操作。要下载日志,请使用操作返回的 URL。

或者,您可以通过将游戏服务器配置为将日志直接发送到您的首选日志服务或存储位置来设置自己的日志解决方案。有关更多信息,请参阅 与舰队中的其他 AWS 资源进行沟通

集装箱船队

容器队列捕获所有容器的标准输出和错误流。您可以使用以下选项之一配置日志记录:

  • 将容器输出另存为 CloudWatch 指定日志组中的日志流

  • 将容器输出保存到 S3 存储桶

  • 关闭日志记录(不保存容器输出)

有关在创建容器队列时配置日志记录选项的详细信息,请参阅 Amazon GameLift Servers API 参考LogConfiguration中的。