domingo, 29 de março de 2026

UEFN Verse: Logging e Log channel

Mensagens escritas no log podem ajudar a identificar problemas no seu código Verse. Estas mensagens podem ser visualizadas na aba de log dentro do jogo e na janela Output Log do UEFN.

Para escrever logs em Verse, você precisa usar duas classes: log e log_channel.

O log_channel é usado apenas para identificar a origem da mensagem. Seu nome é adicionado ao início da mensagem.

É necessário criar uma subclasse de log_channel no escopo de módulo, ou seja, fora de classes ou funções. O código abaixo mostra um exemplo de log_channel:

log_general := class(log_channel){}

O próximo passo é criar uma instância da classe log dentro de uma classe ou função, informando o log_channel que será utilizado:

LoggerGeneral:log = log{Channel:=log_general}

Existem 5 níveis de log que podem ser usados para categorizar a mensagem: Debug, Verbose, Normal, Warning e Error.

Logs com níveis Debug e Verbose aparecem apenas na aba de log dentro do jogo. Eles não aparecem no Output Log do UEFN.

Logs com níveis Warning e Error são exibidos em cores diferentes para chamar mais atenção.

É possível definir um nível padrão para um log no momento de sua criação: 

LoggerGeneral:log = log{Channel:=log_general, DefaultLevel:=log_level.Warning}

Para escrever no log, use a função Print da classe log:

LoggerGeneral.Print("Experience started")

Você pode passar como parâmetro o nível de log da mensagem:

LoggerGeneral.Print("Data not found", ?Level := log_level.Error)

Outra informação útil na análise de problemas é o Call Stack (pilha de chamadas) que mostra as funções chamadas até chegar ao ponto atual do código. Use a função PrintCallStack da classe log para registrar o Call Stack. 

LoggerGeneral.PrintCallStack()

Para ilustrar o uso de logs, vamos criar um dispositivo que utiliza dois logs. Um deles será usado para mensagens gerais do sistema e o outro log será para registrar mensagens quando os botões forem pressionados pelo jogador. Serão usados diferentes níveis de log.

Abra o Verse Explorer, clique com o botão-direito no nome do projeto e escolha a opção Add new Verse file to project.

Em Device Name coloque log_example_device clique no botão Create Empty.

Copie o código Verse abaixo para o dispositivo log_example_device:

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

log_general := class(log_channel){}
log_buttons := class(log_channel){}

log_example_device := class(creative_device):

    LoggerGeneral:log = log{Channel:=log_general}
    LoggerButtons:log = log{Channel:=log_buttons, 
                            DefaultLevel := log_level.Warning}

    var BtnWarningCount: int = 0
    var BtnErrorCount: int = 0

    @editable
    ButtonWarning : button_device = button_device{}

    @editable
    ButtonError : button_device = button_device{}

    OnBegin<override>()<suspends>:void=
        ButtonWarning.InteractedWithEvent.Subscribe(ButtonWarningPressed)
        ButtonError.InteractedWithEvent.Subscribe(ButtonErrorPressed)
        LoggerGeneral.Print("Experience started.")

    ButtonWarningPressed(Agent:agent):void=
        set BtnWarningCount += 1
        LoggerButtons.Print("ButtonWarning was pressed {BtnWarningCount} times")

    ButtonErrorPressed(Agent:agent):void=
        set BtnErrorCount += 1
        LoggerButtons.Print("ButtonError was pressed {BtnErrorCount} times", 
                            ?Level := log_level.Error)
        LoggerButtons.PrintCallStack()

O dispositivo log_example_device possui dois button_device que serão usados para registrar mensagens no log quando forem pressionados. Um botão será usado para mensagens com o nível Warning e o outro para mensagens com o nível Error.

A função OnBegin registra, nos botões, as funções que serão chamadas quando eles forem pressionados e, em seguida, escreve uma mensagem no log usando o LoggerGeneral.

Salve o arquivo e compile o código Verse usando a opção Verse > Compile Verse Code do menu do UEFN. 

Acesse o Content Drawer e adicione o dispositivo log_example_device ao nível. Em seguida, adicione dois Button Devices ao nível. 



Selecione o log_example_device no nível. Na aba Details, selecione as referências aos botões que estão no nível. 


Salve o nível e clique no botão Launch Session para carregar o nível no Fortnite. Pressione os botões algumas vezes. Em seguida, alterne para o UEFN e verifique no Output Log as mensagens registradas.