게임 서버의 로그 처리 방식 중 하나

3295 단어
게임 개발 과정에서 우리는 앞으로 게임 운행 상황을 이해하고 로그에 따라 게임 중의 돌발 상황을 발견하고 처리할 수 있도록 로그를 기록해야 한다.첫째, 게임 로그는 다음과 같은 몇 가지로 나눌 수 있다. 1) 시스템 로그 2) 사용자 조작 로그 3) 이상 로그, 즉 오류 로그 시스템 로그 시스템 로그는 일반적으로 서버가 일상적으로 실행되는 상태를 설명한다.예를 들어 시동이 성공했는지, 매일 메모리의 사용량, CPU의 사용량 등 정보를 통계해 보자.서버가 실행 중인 상태를 검사하는 데 사용됩니다.이것은 기술 분석에 있어서 매우 중요하다.만약 이런 정보가 없다면, 서버가 다운되면, 우리는 두 눈이 어두워져서 어디서부터 손을 대야 할지 모르겠다.이 부분의 로그는 일반적으로 발생하는 파일이 크지 않고 내용이 많지 않아서 보기 위해 텍스트 형식으로 기록할 수 있다.데이터베이스에 저장하거나 도구로 보려면 로그의 형식을 잘 정의해서 해석해야 합니다.사용자 로그 게임 서버의 핵심은 바로 사용자의 로그입니다.사용자 로그는 몇 가지 종류로 나눌 수 있는데 그것이 바로 로그인 로그이다.소비일지, 수입일지, 행위일지, 충전일지.1, 로그인 로그는 주로 유저의 로그인 시간, IP 등의 정보를 기록합니다.로그인 로그는 클라이언트의 상태를 판단하는 데 사용할 수 있습니다.소프트웨어를 사용하여 비정상적인 대규모 액세스를 식별합니다.예를 들어 잦은 로그인이 끊어진다.이것은 서버에 추가적인 압력을 가할 것이다.정상적인 유저를 영향을 받게 하고, 때로는 심각해서 정상적으로 로그인할 수 없습니다.관리자는 이러한 정보에 따라 이 클라이언트의 IP에 대해 일련 번호를 지정할 수 있습니다.2, 소비 일지는 주로 게이머들이 게임에서 각종 화폐의 소비 상황을 기록한다.이러한 정보에 따라 유저의 대부분 자금 흐름을 분석할 수 있어 운영 마케팅에 큰 도움이 된다.이 정보에 따라 서버 시스템에 돈을 긁는 버그가 있는지 확인할 수 있다.한 사람이 한 물건을 무한정 구매할 수 있는 것은 분명히 비정상적이기 때문이다.이 로그에 따르면 어떤 기능이 이런 상황을 초래했는지 빠르게 파악할 수 있다.3, 수입 일지는 주로 유저가 게임에서 화폐의 출처 상황을 기록한다.게임 시스템 전체가 만들어낸 표현이기도 하다.수치가 전체 게임의 생산 상황에 대해 전면적으로 이해하기 편리하다.시스템의 버그를 발견하는 데도 도움이 된다. 왜냐하면 한 사람의 자금이 갑자기 다른 유저보다 훨씬 높기 때문에 비정상적이다.이 로그에 따르면 어떤 기능이 이런 이상한 성장을 초래했는지 알 수 있다.4 행위 로그는 주로 유저의 일부 조작 행위, 예를 들어 카드 추첨 횟수, 도전 횟수, 구매 횟수 등 정보를 기록한다.게이머들의 게임 성장 과정 중의 행위를 분석하다.이 로그에 따르면 게임의 일부 작은 기능을 수정하여 사용자 체험의 호감을 높일 수 있다.5 충전 로그는 주로 유저의 충전 정보를 기록합니다.이것은 매우 중요한 것이다. 만약에 한 유저가 충전하면 돈은 공제되지만 다이아몬드를 다른 사람에게 보내지 않으면 다른 사람에게 설명을 해야 한다.충전 일지는 어떤 유저가 부자인지 직접 반영하여 게임 수입의 출처를 알 수 있다.이상 로그는 주로 게임 서버에서 프로그램에서 발생한 이상을 기록합니다.몇몇 버그는 테스트 환경에서 테스트하기 어렵다.프로그램의 이상을 기록하면 프로그램의 BUG의 위치를 정하고 BUG가 발생하는 원인을 알 수 있다.게임 서버의 개선에 필요한 지원을 제공하다.2 게임 로그 저장 방식은 로그의 저장은 IO가 밀집된 조작이기 때문에 게임 논리에서 잘못 처리하면 게임 논리 처리가 느리고 게이머들의 체험에 좋지 않은 영향을 줄 수 있다.이전에 자주 사용한 로그 저장 도구는log4j입니다. 주로 로그를 텍스트 파일에 저장합니다. 로그4j의 사용에 관해서는 다른 글에서 다시 설명합니다.오늘 우리는 일지를 입고하는 조작에 대해 이야기했다.로그가 입고되기 전에 반드시 로그의 형식을 정의하여 입고를 해석하기 편리하게 해야 한다.예를 들어 로그인 로그, 기록해야 할 정보는 사용자 id, IP, 로그인 시간 등이다. 이 필드를 한 대상에 쓴 다음에 JSON 문자열로 바꿀 수 있다.일반적으로 로그와 게임의 실시간 관련성은 크지 않다.우리는 로그의 입고 작업을 단독 프로세스 개발로 할 수 있다.그것을 게임 논리 서버와 분리된 다른 물리 기계에서 운행하게 하다.이렇게 하면 게임 논리 서버 자원의 점용을 줄이고 논리 서버의 압력을 줄일 수 있다.실현 방식도 간단하다.게임 논리 서버에서 대기열 초기화:
</pre><pre name="code" class="java">import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class LogManager {
	//  
	private final static BlockingQueue<String> LOG_QUEUE = new LinkedBlockingQueue<String>();

	public static void put(String log) {
		try {
			LOG_QUEUE.put(log);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static String get() {
		try {
			return LOG_QUEUE.take();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
}

서버가 시작될 때, 이 로그 캐시 대기열에서 로그를 꺼내서 Socket 방식으로 로그 서버에 보냅니다.로그 서버는 전송된 로그를 수신합니다.로그 서버는 로그를 데이터베이스에 기록해야 하기 때문에 대규모 쓰기를 중단하기 위해 데이터베이스 연결 자원을 소모하고 로그 서버에도 캐시 대기열을 만들어 로그를 먼저 캐시 대기열에 넣는다.또한 몇 개의 스레드 연결 데이터베이스를 열고 캐시 대기열에서 로그 데이터를 꺼내 로그 데이터베이스에 기록합니다.로그 데이터베이스에서 로그의 시계는 하루에 저장되고, 즉 하루에 한 개의 시계는 프로그램이 자동으로 완성한다.로그의 데이터 양이 매우 방대하기 때문에 데이터베이스에서 유행이 지난 비교적 긴 데이터를 백업하고 삭제할 수도 있고, 빅데이터화 처리를 할 수도 있다

좋은 웹페이지 즐겨찾기