feat: 로그 시스템 구현 및 관련 클래스 추가
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
import {
|
||||
LogCategory,
|
||||
type LogEntryDraft,
|
||||
LogFormat,
|
||||
LogScope,
|
||||
} from './types.js';
|
||||
|
||||
export class ActionLogger {
|
||||
private readonly generalId: number | undefined;
|
||||
private readonly nationId: number | undefined;
|
||||
private readonly logs: LogEntryDraft[] = [];
|
||||
|
||||
constructor(options: { generalId?: number; nationId?: number } = {}) {
|
||||
this.generalId = options.generalId;
|
||||
this.nationId = options.nationId;
|
||||
}
|
||||
|
||||
// 장수/국가/전역 로그를 한번에 모아두고 외부에서 저장한다.
|
||||
public flush(): LogEntryDraft[] {
|
||||
const items = this.logs.splice(0, this.logs.length);
|
||||
return items;
|
||||
}
|
||||
|
||||
public rollback(): LogEntryDraft[] {
|
||||
const backup = this.logs.splice(0, this.logs.length);
|
||||
return backup;
|
||||
}
|
||||
|
||||
public pushGeneralHistoryLog(
|
||||
text: string | string[],
|
||||
format: LogFormat = LogFormat.YEAR_MONTH
|
||||
): void {
|
||||
this.pushBatch(text, (message) => ({
|
||||
scope: LogScope.GENERAL,
|
||||
category: LogCategory.HISTORY,
|
||||
text: message,
|
||||
...(this.generalId !== undefined
|
||||
? { generalId: this.generalId }
|
||||
: {}),
|
||||
format,
|
||||
}));
|
||||
}
|
||||
|
||||
public pushGeneralActionLog(
|
||||
text: string | string[],
|
||||
format: LogFormat = LogFormat.MONTH
|
||||
): void {
|
||||
this.pushBatch(text, (message) => ({
|
||||
scope: LogScope.GENERAL,
|
||||
category: LogCategory.ACTION,
|
||||
text: message,
|
||||
...(this.generalId !== undefined
|
||||
? { generalId: this.generalId }
|
||||
: {}),
|
||||
format,
|
||||
}));
|
||||
}
|
||||
|
||||
public pushGeneralBattleResultLog(
|
||||
text: string | string[],
|
||||
format: LogFormat = LogFormat.RAWTEXT
|
||||
): void {
|
||||
this.pushBatch(text, (message) => ({
|
||||
scope: LogScope.GENERAL,
|
||||
category: LogCategory.BATTLE_BRIEF,
|
||||
text: message,
|
||||
...(this.generalId !== undefined
|
||||
? { generalId: this.generalId }
|
||||
: {}),
|
||||
format,
|
||||
}));
|
||||
}
|
||||
|
||||
public pushGeneralBattleDetailLog(
|
||||
text: string | string[],
|
||||
format: LogFormat = LogFormat.PLAIN
|
||||
): void {
|
||||
this.pushBatch(text, (message) => ({
|
||||
scope: LogScope.GENERAL,
|
||||
category: LogCategory.BATTLE_DETAIL,
|
||||
text: message,
|
||||
...(this.generalId !== undefined
|
||||
? { generalId: this.generalId }
|
||||
: {}),
|
||||
format,
|
||||
}));
|
||||
}
|
||||
|
||||
public pushNationHistoryLog(
|
||||
text: string | string[],
|
||||
format: LogFormat = LogFormat.YEAR_MONTH,
|
||||
nationId: number | undefined = this.nationId
|
||||
): void {
|
||||
if (!nationId) {
|
||||
return;
|
||||
}
|
||||
this.pushBatch(text, (message) => ({
|
||||
scope: LogScope.NATION,
|
||||
category: LogCategory.HISTORY,
|
||||
text: message,
|
||||
nationId,
|
||||
format,
|
||||
}));
|
||||
}
|
||||
|
||||
public pushGlobalHistoryLog(
|
||||
text: string | string[],
|
||||
format: LogFormat = LogFormat.YEAR_MONTH
|
||||
): void {
|
||||
this.pushBatch(text, (message) => ({
|
||||
scope: LogScope.SYSTEM,
|
||||
category: LogCategory.HISTORY,
|
||||
text: message,
|
||||
format,
|
||||
}));
|
||||
}
|
||||
|
||||
public pushGlobalActionLog(
|
||||
text: string | string[],
|
||||
format: LogFormat = LogFormat.MONTH
|
||||
): void {
|
||||
this.pushBatch(text, (message) => ({
|
||||
scope: LogScope.SYSTEM,
|
||||
category: LogCategory.SUMMARY,
|
||||
text: message,
|
||||
format,
|
||||
}));
|
||||
}
|
||||
|
||||
private pushBatch(
|
||||
text: string | string[],
|
||||
builder: (message: string) => LogEntryDraft
|
||||
): void {
|
||||
if (Array.isArray(text)) {
|
||||
for (const item of text) {
|
||||
if (item) {
|
||||
this.logs.push(builder(item));
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (!text) {
|
||||
return;
|
||||
}
|
||||
this.logs.push(builder(text));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user