Project

General

Profile

Actions

게임 로그

로그는 게임 서비스에서 매우 중요한 역할을 차지합니다. LE_HACK , LE_CLIENT_IN , LE_CLIENT_OUT , LE_CHAT_CHANNEL , LE_ROOM_CREATE , LE_ROOM_JOIN , LE_ROOM_END , LE_ITEM_BUY , LE_ITEM_SELL , LE_ITEM_DESTRUCT , LE_ITEM_USE 등은 서비스 운영에 반드시 필요한 것들이며 LE_BUG 역시 서비스 안정화에 필요합니다.

어떠한 뛰어난 개발자라도 완벽히 모든 상황을 예측할수 없습니다. 서버 코드 작성중에 조건문 분기시 들어가서는 안되는 위치에 LE_BUG 를 남겨주세요. 파일 위치, 라인 위치, 추적을 위한 오류 메세지 등이 필요합니다.

이제 서버 개발자가 할일은 서식있는 로그를 남기는 것입니다.

enum LOG_EVENT_TYPE {
    LE_SERVER_START = 0,
    LE_SERVER_STOP = 1,
    LE_HACK = 2,
    LE_BUG = 3,
    LE_CLIENT_IN = 6,
    LE_CLIENT_OUT = 7,
    LE_CHAT_CHANNEL = 10,
    LE_ROOM_CREATE = 26,
    LE_ROOM_JOIN = 27,
    ...
};

LE_HACK 필드 서식

LF_AID , iAccountId, LF_DEBUG , iLineNumber, LF_STRING , szMessage

LE_BUG 필드 서식

LF_AID , iAccountId, LF_DEBUG , iLineNumber, LF_STRING , szMessage

LE_CLIENT_IN 필드 서식

LF_AID , iAccountId, LF_LOGIN_ID , szLoginId

LE_CLIENT_OUT 필드 서식

LF_AID , iAccountId, LF_LOGIN_ID , szLoginId

LE_CHAT_CHANNEL 필드 서식

LF_AID , iAccountId, LF_LOGIN_ID , szLoginId, LF_CHANNEL_ID , iChannelId, LF_STRING , szMessage

LE_ROOM_CREATE 필드 서식

LF_AID , iAccountId, LF_ROOM_ID , iRoomId, LF_STAGE_ID , iStageId, LF_STRING , szMessage

LE_ROOM_JOIN 필드 서식

LF_AID , iAccountId, LF_ROOM_ID , iRoomId, LF_STAGE_ID , iStageId, LF_STRING , szMessage

enum LOG_EVENT_TYPE {
    LF_NONE = 0,
    LF_DEBUG = 1,
    LF_SUCCESS = 3,
    LF_FAIL = 4,
    LF_TIME = 5,
    LF_STRING = 6,
    LF_AID = 7,
    LF_AID_TARGET = 8,
    LF_NAME = 9,
    LF_CHANNEL_ID = 10,
    LF_LOGIN_ID = 13,
    LF_COUNT = 16,
    LF_ROOM_ID = 22,
    LF_STAGE_ID = 23,
    ...
};

넷드론 엔진은 다음과 같이 FILELOG 매크로를 제공합니다.

FILELOG(
    LE_ROOM_CREATE
    << LF_AID << rkActor_.GetAid()
    << LF_ROOM_ID << pkRoom->GetId()
    << LF_STAGE_ID << pkRoom->GetStageId()
    << LF_STRING << pkRoom->GetName());

FILELOG 매크로는 항상 시작 필드에 기록 시간을 남기게 되고 << 연산자를 , 로 인식합니다.

1452416264,26,7,7,22,3072,23,1,6,enjoy your time
1452416267,26,7,7,22,3072,23,1,6,enjoy your time
1452416272,26,7,7,22,3072,23,1,6,enjoy your time

어떠신가요?

문자열 이벤트, 필드 문자열을 사용할때 보다 매우 작은 크기로 저장됩니다. 온라인 게임 서비스를 운영할 때는 매일같이 상당한 양의 로그를 기록합니다. 즉 디스크 용량 한계, 디스크 IO 속도, 로그 데이터 크기, 로그 기록 위치 등을 고려해야 하며 이를 소홀히 할 경우 심각한 상황들을 초래합니다.

Updated by Master Chief 6 days ago · 4 revisions