AI Core
Referencia de la APILib: compartido y fivem

Logging

createLogger, logSafe y previewJson: líneas de consola con el nombre de tu recurso, y texto no fiable preparado para imprimirse sin riesgo.

Estas utilidades escriben en la consola (F8 en un cliente, la consola del servidor o txAdmin en el servidor). Para los logs que el dueño del servidor lee en Discord, Fivemanage o FiveM Stats, usa aiLog en su lugar (consulta Logs).

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

createLogger

Devuelve un logger cuyas líneas empiezan por [your-resource], para que la consola del servidor muestre de dónde viene cada línea. Los avisos son amarillos, los errores rojos.

Lado: Cliente, servidor y NUI · Espera: no

Firma
createLogger(resource: string): Logger

Lua: sin equivalente; usa print(('[%s] %s'):format(GetCurrentResourceName(), message)).

Parámetros

Prop

Type

Devuelve

Logger:

Prop

Type

Ejemplo

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

const log = createLogger(GetCurrentResourceName());

log.info("loaded 12 shops");               // [my-shop] cargadas 12 tiendas
log.warn("shop legion has no ped model");  // amarillo
try {
  JSON.parse("{");
} catch (error) {
  log.error("could not read shops.json", error); // rojo, con el error
}

logSafe

Prepara un texto que envió un cliente para la consola del servidor: una sola línea (los saltos de línea pasan a ser |), sin caracteres de control, sin códigos de color ^1, cortado a max caracteres. Úsalo siempre que una línea de log contenga texto de un jugador (un nombre, un mensaje, una nota).

Lado: Cliente, servidor y NUI · Espera: no

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

Lua: sin equivalente.

Parámetros

Prop

Type

Devuelve

string: el texto limpio.

Ejemplo

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

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

Sin esto, un jugador puede escribir un mensaje de chat con códigos de color ^1 y saltos de línea que parezca un error real del servidor en tu consola.

previewJson

Un texto corto parecido a JSON de cualquier valor no fiable, cortado a max caracteres, construido sin serializar antes el valor entero (una carga hostil puede ocupar megabytes). Los anidamientos de más de 4 niveles se muestran como [...] / {...}. Úsalo para imprimir lo que envió un cliente cuando lo rechazas.

Lado: Cliente, servidor y NUI · Espera: no

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

Lua: sin equivalente.

Parámetros

Prop

Type

Devuelve

string: la vista previa, como máximo max caracteres. Las claves de los objetos se cortan a 50 caracteres.

Ejemplo

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)}`);
}

En esta página