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).
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
createLogger(resource: string): LoggerLua: sin equivalente; usa print(('[%s] %s'):format(GetCurrentResourceName(), message)).
Parámetros
Prop
Type
Devuelve
Logger:
Prop
Type
Ejemplo
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
logSafe(text: string, max: number): stringLua: 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
previewJson(value: unknown, max: number): stringLua: 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
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)}`);
}