beasty-visual-novel / production / logging.md

Logging

Dónde acaban los mensajes de log de la VN, cómo silenciar un subsistema ruidoso sin silenciar el resto, y por qué una build publicada se queda callada por defecto. Aquí no hay nada que configurar: los valores por defecto ya son los que quieres en el editor y en una build de lanzamiento.

Todo pasa por una sola fachada

El paquete nunca llama a UnityEngine.Debug directamente. Cada mensaje que produce — cargar un asset de historia, avanzar un nodo, resolver un keyframe, escribir un guardado — pasa por VNLog, una fachada estática — una única puerta de entrada para todos los mensajes — del espacio de nombres Beasty.VN.Core.

Dónde aterrizan los mensajes depende de una sola cosa: de si Beasty Console — un asset aparte, y opcional — está en el proyecto. Con ella instalada, cada mensaje va a su ventana en Tools > Beasty Console > Console. Consulta La ventana Beasty Console para ver lo que aporta: filtros por nivel con recuentos en vivo, búsqueda, Collapse, Clear on Play, y un panel de detalle cuyas líneas de traza abren el archivo en la línea exacta dentro de tu IDE. Sin ella, los mensajes van a la consola propia de Unity — el mismo contenido, sin los filtros por nivel ni los colores por categoría.

La VN no depende de la consola: VNLog la encuentra por reflexión — la busca en tiempo de ejecución en lugar de referenciarla directamente —, así que la VN compila y funciona en ambos casos, e importar Beasty Console más tarde no exige recablear nada; los logs de la VN llegan a su ventana desde ese momento.

Cada mensaje lleva delante [BeastyVN][Categoría], así que con el campo de búsqueda de la consola basta para aislar lo que imprime el paquete de lo que imprimes tú. Las excepciones se le entregan a la consola como el objeto de excepción en sí, que es lo que mantiene intacta la traza de Unity.

Categorías

Cada mensaje va etiquetado con el área de la que viene, y cada área tiene su propio interruptor:

Logs de la VN en la consola, uno por categoría

CategoríaQué se registra por ahíPor defecto
DataCarga de ScriptableObjects, validación, integridad del modeloActivo
DirectorControl de flujo, transiciones de nodo, elecciones, decisionesActivo
StagePresentación de la escena: fondo, vídeo, personajes, resolución de keyframesActivo
StreamingLa ventana de carga de nodos, la precarga y liberación con AddressablesActivo
SaveLa integración de guardado y cargaActivo
VerboseSalida de mucha frecuencia: la máquina de escribir, trabajo por frameApagado

Los interruptores son campos públicos de VNLog:

using Beasty.VN.Core;

VNLog.LogStage = false;          // corta la cháchara del escenario y deja el resto
VNLog.LogVerboseChannel = true;  // enciende el canal ruidoso mientras depuras la máquina de escribir

Verbose viene apagado porque imprime durante el efecto de máquina de escribir y en trabajo por frame. Enciéndelo mientras persigues algo ahí, y vuelve a apagarlo.

Nota Las advertencias, errores y excepciones ignoran los interruptores por categoría. Silenciar Stage silencia sus mensajes informativos; un error del escenario te sigue llegando. Solo el interruptor maestro de abajo los oculta.

El interruptor maestro

VNLog.Enabled = false;

Eso silencia todo el logging de la VN, advertencias y errores incluidos. Su valor por defecto depende de la build:

DóndePor defecto
EditorActivo
Build de desarrolloActivo
Build de releaseApagado

Esa es justo la idea. Una novela visual registra algo en cada línea de diálogo, cada elección y cada cambio de sala, y un juego publicado no debe escribir todo eso en el log del jugador. No tienes que hacer nada para conseguir ese comportamiento: es lo que ya hace una build de lanzamiento.

Si sí quieres los logs de vuelta en una build de lanzamiento, pon Enabled = true tú mismo.

Poner los interruptores para que se queden puestos

VNLog reinicia todos sus interruptores durante la inicialización del runtime de Unity, así que cada sesión de Play y cada build arrancan desde los valores por defecto de arriba. Un valor que pongas desde un script de editor, o en una sesión anterior, no sobrevive.

Los interruptores de log por categoría, y el interruptor maestro

Ponlos después del arranque — desde un MonoBehaviour de arranque en tu primera escena, o desde un RuntimeInitializeOnLoadMethod:

using UnityEngine;
using Beasty.VN.Core;

public class VNLoggingBootstrap : MonoBehaviour
{
    private void Awake()
    {
        VNLog.LogStreaming = false;  // los logs de streaming de este proyecto no interesan
        VNLog.LogVerboseChannel = false;
    }
}

Dos interruptores, no uno

Con Beasty Console en el proyecto, VNLog se apoya en ella, así que hay dos interruptores por encima de tus logs y cualquiera de los dos silencia la VN:

  • VNLog.Enabled — el interruptor propio de la VN. Apagado en una build de lanzamiento.
  • BeastyConsole.IsEnabled — el interruptor maestro de la consola, que silencia todo el proyecto, incluidas tus propias llamadas de log. Vuelve a true al principio de cada ejecución. Consulta Builds de lanzamiento.

Ninguno de los dos elimina las llamadas de la build. Detienen la salida, no el trabajo de construir el mensaje. Eso importa para tu propio logging, no para el del paquete — consulta Builds de lanzamiento para el patrón.

Registrar desde tu propio código

VNLog es público, así que puedes etiquetar tus propios mensajes con una categoría de la VN y que se filtren junto a los del paquete:

VNLog.Info(VNLogCategory.Director, "Capítulo 3 desbloqueado", this);

El último parámetro es un objeto context: le pasas un GameObject o un ScriptableObject y la entrada se vuelve clicable, señalando ese objeto en la jerarquía o en la ventana de proyecto.

Para mensajes que no tienen nada que ver con la VN — si tienes Beasty Console —, llama a BeastyConsole directamente. Consulta Logging.

Ver también