AI Core
API-ReferenzLib: Shared und fivem

Logging

createLogger, logSafe und previewJson: Konsolenzeilen mit dem Namen deiner Ressource und nicht vertrauenswürdiger Text, der sicher ausgegeben werden kann.

Diese Helfer schreiben in die Konsole (F8 auf einem Client, die Server-Konsole oder txAdmin auf dem Server). Für Logs, die der Serverbetreiber in Discord, Fivemanage oder FiveM Stats liest, nutze stattdessen aiLog (siehe Logs).

TypeScript
import { createLogger, logSafe, previewJson } from "@aicore-fivem/lib/shared";

createLogger

Gibt einen Logger zurück, dessen Zeilen mit [your-resource] beginnen, damit die Server-Konsole zeigt, woher jede Zeile kommt. Warnungen sind gelb, Fehler rot.

Seite: Client, Server und NUI · Wartet: nein

Signatur
createLogger(resource: string): Logger

Lua: kein Zwilling; nutze print(('[%s] %s'):format(GetCurrentResourceName(), message)).

Parameter

Prop

Type

Rückgabewert

Logger:

Prop

Type

Beispiel

resource/server/index.ts
import { createLogger } from "@aicore-fivem/lib/shared";

const log = createLogger(GetCurrentResourceName());

log.info("loaded 12 shops");               // [my-shop] loaded 12 shops
log.warn("shop legion has no ped model");  // gelb
try {
  JSON.parse("{");
} catch (error) {
  log.error("could not read shops.json", error); // rot, mit dem Fehler
}

logSafe

Macht Text, den ein Client gesendet hat, sicher für die Server-Konsole: eine Zeile (Zeilenumbrüche werden zu |), keine Steuerzeichen, keine ^1-Farbcodes, auf max Zeichen gekürzt. Nutze es immer, wenn eine Log-Zeile Text eines Spielers enthält (einen Namen, eine Nachricht, eine Notiz).

Seite: Client, Server und NUI · Wartet: nein

Signatur
logSafe(text: string, max: number): string

Lua: kein Zwilling.

Parameter

Prop

Type

Rückgabewert

string: der bereinigte Text.

Beispiel

import { logSafe } from "@aicore-fivem/lib/shared";

logSafe("^1fake error\nsecond line", 100); // "fake error | second line"

Ohne es kann ein Spieler eine Chatnachricht mit ^1-Farbcodes und Zeilenumbrüchen schreiben, die in deiner Konsole wie ein echter Server-Fehler aussieht.

previewJson

Ein kurzer JSON-ähnlicher Text eines beliebigen nicht vertrauenswürdigen Werts, bei max Zeichen abgeschnitten, gebaut, ohne zuerst den ganzen Wert zu serialisieren (eine feindliche Nutzlast kann Megabytes groß sein). Verschachtelung tiefer als 4 Ebenen erscheint als [...] / {...}. Nutze es, um auszugeben, was ein Client gesendet hat, wenn du es ablehnst.

Seite: Client, Server und NUI · Wartet: nein

Signatur
previewJson(value: unknown, max: number): string

Lua: kein Zwilling.

Parameter

Prop

Type

Rückgabewert

string: die Vorschau, höchstens max Zeichen. Objektschlüssel werden auf 50 Zeichen gekürzt.

Beispiel

resource/server/index.ts
import { onClientEvent } from "@aicore-fivem/lib/server";
import { createLogger, logSafe, previewJson } from "@aicore-fivem/lib/shared";

const log = createLogger(GetCurrentResourceName());

onClientEvent("my-shop:rate", (source) => {
  log.info(`${logSafe(GetPlayerName(String(source)) ?? "?", 32)} opened the rating`);
});

function refuse(source: number, raw: unknown[]): void {
  log.warn(`refused input from ${source}: ${previewJson(raw, 200)}`);
}

Auf dieser Seite