Логирование
createLogger, logSafe и previewJson: строки в консоли с именем вашего ресурса и недоверенный текст, безопасный для вывода.
Эти помощники пишут в консоль (F8 на клиенте, консоль сервера или txAdmin на сервере). Для логов, которые владелец сервера читает в Discord, Fivemanage или FiveM Stats, используйте aiLog (см. Логи).
import { createLogger, logSafe, previewJson } from "@aicore-fivem/lib/shared";createLogger
Возвращает логгер, строки которого начинаются с [your-resource], поэтому в консоли сервера видно, откуда пришла каждая строка. Предупреждения жёлтые, ошибки красные.
Сторона: Клиент, сервер и NUI · Ждёт: нет
createLogger(resource: string): LoggerLua: аналога нет; используйте print(('[%s] %s'):format(GetCurrentResourceName(), message)).
Параметры
Prop
Type
Возвращает
Logger:
Prop
Type
Пример
import { createLogger } from "@aicore-fivem/lib/shared";
const log = createLogger(GetCurrentResourceName());
log.info("loaded 12 shops"); // [my-shop] загружено 12 магазинов
log.warn("shop legion has no ped model"); // жёлтая
try {
JSON.parse("{");
} catch (error) {
log.error("could not read shops.json", error); // красная, с ошибкой
}logSafe
Делает текст, отправленный клиентом, безопасным для консоли сервера: одна строка (переносы становятся |), без управляющих символов, без цветовых кодов ^1, урезано до max символов. Используйте всегда, когда строка лога содержит текст игрока (имя, сообщение, заметку).
Сторона: Клиент, сервер и NUI · Ждёт: нет
logSafe(text: string, max: number): stringLua: аналога нет.
Параметры
Prop
Type
Возвращает
string: очищенный текст.
Пример
import { logSafe } from "@aicore-fivem/lib/shared";
logSafe("^1fake error\nsecond line", 100); // "fake error | second line"Без этого игрок может написать в чат сообщение с цветовыми кодами ^1 и переносами строк, которое в вашей консоли выглядит как настоящая ошибка сервера.
previewJson
Короткий JSON-подобный текст любого недоверенного значения, урезанный до max символов и построенный без предварительной сериализации всего значения (враждебные данные могут весить мегабайты). Вложенность глубже 4 уровней показывается как [...] / {...}. Используйте, чтобы вывести то, что прислал клиент, когда вы ему отказываете.
Сторона: Клиент, сервер и NUI · Ждёт: нет
previewJson(value: unknown, max: number): stringLua: аналога нет.
Параметры
Prop
Type
Возвращает
string: предпросмотр, не более max символов. Ключи объектов урезаются до 50 символов.
Пример
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)}`);
}