SigLog

Common abstract log system

JOOQ 기반의 동적 쿼리, 페이지화 된 명령어를 지원하는 추상 로그 시스템입니다. 각 요소를 확장하여 사용할 수 있습니다.

예시 Implementation은 SigReward 패키지에 있는 log를 확인해보세요.

SigLogController

각 컴포넌트들의 인스턴스 생성을 진행하고 init()을 수행하는 컨트롤러이며, Api의 역할도 겸합니다.

이곳에서 의존성 주입을 진행하며 생성된 컴포넌트 들은 Setter로 설정되어야 합니다.

log(SigLogData data)를 통해 새 로그를 추가할 수 있습니다. (다른 방식으로 업데이트 할 경우 SigLogListener에 수동 업데이트 필요)

getCache(UUID) 를 통해 로그 캐시를 가져올 수 있으나, 캐시 기능을 활성화를 위해서는 SigLogListener를 먼저 등록해야 합니다.

Override 해야 하는 곳은 다음과 같습니다.

  • SigLogViewer<T> createViewer();

SigLogCommand

ChatPaginator를 가지고 있는 로그 조회 명령어입니다.

Override 해야 하는 곳은 다음과 같습니다.

  • super(label)

  • McLocaleBundle getLocalization()

  • List<String> getLogFormat()

  • String getLogLineFormat()

SigLogDao

Data Access Object 입니다.

Override 해야 하는 곳은 다음과 같습니다.

  • String getTableName()

  • Connection getConnection()

  • Class<T> getDataClass()

추가 필드는 생성자 에서 다음 구문을 통해 전달되어야 합니다.

SigLogData

로그 결과 데이터를 가지고 있는 DTO 입니다.

Override 해야 하는 곳은 다음과 같습니다.

  • String formatLog(String)

JOOQ가 RecordMapper 로 역직렬화 가능한 타입만 존재할 수 있습니다. (다른 타입 필요 시 DSLContext에 직접 등록 필요)

SigLogViewer

동적 쿼리를 만드는 객체입니다. 명령어를 받아서 쿼리로 변환합니다.

addCommand(String, Consumer<String>)을 통해 특정 명령어를 받았을 때 어떤 동작을 실행할 지 정할 수 있습니다.

이 곳에 등록된 Command는 SigLogCommand 에서 args를 입력해 각 args 마다callCommand 를 호출할 때 :를 기준으로 나뉘어 앞의 키로 찾게 됩니다.

ex) user: qsef1256 -> command name: user value: qsef1256

위 예시에서 플레이어의 SigLogCommand의 args로 user: qsef1256를 입력할 경우 PlayerUtil.getUUIDFromPlayerName("qsef1256"))를 타고 sender(UUID)를 호출하게 됩니다.

이 곳에 등록된 Command의 name들은 getCommandTabComplete()을 통해 Tab Complete 을 만드는데도 사용됩니다.

명령어 목록은 서버 플러그인 사용법:로그를 참고하세요.

SigLogListener

Cache 시스템을 위한 Listener 입니다. SigLogController에 등록 후 사용할 수 있습니다. SigLogController를 통해 log 할 시 자동으로 업데이트 됩니다.

Last updated