

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 서버 메시지 로깅(사용자 지정 서버)
<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)을 참조하세요.