Console

O feed de diagnóstico ao vivo do programa em execução: 500 entradas em memória, buscadas e filtradas por nível, área e componente, com uma captura detalhada e um pacote de suporte para investigação.

Ver como Markdown

A aba Console de Eventos (/events?view=console) é o feed de diagnóstico de todo o programa: cada subsistema (a aplicação, o servidor OPC UA embutido, os drivers, a Logic, o Process, os dashboards, o acesso de agente e o licenciamento) escreve num fluxo só, e o Console mostra as 500 entradas mais recentes dele, ao vivo. Ela é a última aba porque é o detalhe técnico que se lê por último, depois das linhas do tempo tipadas. Vê-la exige Ver eventos; exportar linhas ou criar um pacote de suporte exige Exportar/importar históricos; iniciar ou parar uma captura detalhada exige Alterar configurações.

O feed e o seu buffer

O Console é uma projeção do fluxo único de diagnóstico do processo, mantida em memória: as 500 entradas mais recentes, compartilhadas por toda superfície que as mostra (a janela da própria estação, todo navegador remoto, toda aba). As entradas mais antigas saem conforme as novas chegam; nada nesta aba sobrevive a um reinício. Esse mesmo fluxo é escrito num arquivo diário rotativo, logs\ganter-lab-<date>.log na pasta de dados da estação (30 dias guardados, 50 MB por arquivo), que é o que um pacote de suporte recolhe.

Toda entrada é higienizada antes de chegar ao Console ou ao arquivo: senhas, tokens, chaves e credenciais dentro de URLs são substituídas por "[REDACTED]", cargas de protocolo (bytes crus, documentos JSON ou XML) por "[PROTOCOL PAYLOAD OMITTED]", uma mensagem é cortada em 16 KB e uma exceção em 64 KB com "…[TRUNCATED]". Só entradas de nível Informação para cima entram no feed; o detalhe verboso, e as entradas que um produtor marca como detalhe de diagnóstico (a conversa de protocolo crua e repetitiva), chegam apenas a um arquivo de captura detalhada. Falhas de comunicação que se repetem são agrupadas pelo seu produtor numa linha de primeira falha, resumos periódicos e uma linha de recuperação, para que um dispositivo quebrado não inunde a lista.

Uma entrada

Cada linha mostra a hora do dia, um ponto para o nível (neutro para Info, cautela para Alerta, crítico para Erro), "Área · Componente" e a mensagem. O botão Copiar linha, na borda direita de uma linha, copia "instante completo [Severidade] Área · Componente mensagem", e o feed de ações responde "Linha copiada para a área de transferência." (ou "A área de transferência recusou a cópia." num navegador que a nega). Clicar na linha a seleciona e abre o painel de detalhes.

A caixa "Buscar nas mensagens e em todo o contexto disponível" filtra enquanto você digita, sem atraso. Uma linha casa quando o texto está contido (sem diferenciar maiúsculas) em qualquer um destes: a mensagem, a área, o componente, o logger, o dispositivo, o tag, a operação, o cliente, a sessão, a unidade, o procedimento, o id da execução ou o texto de detalhe (uma exceção e o seu stack trace).

Os chips de nível

Três chips, Info, Alerta e Erro, cada um um alternador com um ponto no tom do nível e uma contagem ao vivo. Um chip ligado mostra o seu nível; clique nele para esconder aquele nível. A contagem é quantas entradas o chip revelaria sob a busca, a área e o componente atuais: ela respeita esses três filtros e ignora os próprios alternadores de nível, então um nível escondido continua anunciando o que guarda. Os três começam ligados.

Não há chip de Debug: entradas abaixo de Informação nunca entram no feed, então um chip para elas só poderia marcar 0 e não esconderia nada. O detalhe verboso se encontra num arquivo de captura detalhada.

As listas Área e Componente

Lista Valores O que faz
Área Todas as áreas (padrão) e, em seguida, uma por subsistema: App, Servidor, Connector, Logic, Process, Dashboard, Agente, Licenciamento Mantém as entradas de um subsistema.
Componente Todos os componentes (padrão) e, em seguida, todo componente presente no buffer para a área selecionada, em ordem alfabética Mantém as entradas de um produtor concreto dentro da área (um driver, um worker, o SDK do OPC UA).
Área O que escreve ali
App O ciclo de vida da aplicação: o host da área de trabalho, o registro em log, o tratamento de falhas e de atualizações, as falhas do próprio diário de eventos e tudo o que não nomeou outra área.
Servidor O servidor OPC UA embutido e o seu SDK.
Connector A comunicação com dispositivos: o conector, os drivers, as leituras e escritas de tags.
Logic Variáveis, ações, gatilhos, alarmes e o funil de escrita.
Process Modelos, receitas, avaliações, ocorrências, o monitor de intertravamento e o ciclo de vida da execução.
Dashboard Comandos acionados em dashboards, e o host web embutido que os serve.
Agente O que um agente de IA fez via MCP.
Licenciamento A licença da estação e o limitador de runtime não licenciado.

O componente que você escolheu continua na lista mesmo depois que toda entrada que o carregava saiu do buffer, para que um filtro posto a vigiar um driver não seja alargado em silêncio para todo componente; uma lista vazia é então a resposta honesta. Mudar a área reconstrói a lista de componentes daquela área.

Acompanhando o fim

Com Acompanhar o fim (rolagem automática) ligado (o padrão), a lista gruda na entrada mais recente conforme o feed cresce. Rolar para cima o desliga, para que você possa ler algo enquanto as entradas continuam chegando; rolar de volta até 24 pixels do fundo o liga de novo. Enquanto ele está desligado, uma pílula "N entradas novas" (ou "1 entrada nova") conta as chegadas que casam com os filtros atuais; clique nela, ou no botão da barra de ferramentas, para voltar ao fim. Trocar para outra aba e voltar preserva o estado de acompanhamento, e salta para o fim se ele estava ligado.

A barra de ferramentas

Comando O que faz Fica cinza quando Não é desenhado quando
Iniciar a captura / Parar a captura Inicia uma captura detalhada de diagnóstico por até 15 minutos, ou para a que está correndo (veja abaixo). Enquanto a troca está sendo aplicada O papel não tem Alterar configurações
Abrir em janela Abre a página Eventos numa aba ou janela nova do navegador, tanto na janela da própria estação quanto num navegador remoto, para que o feed possa ficar num segundo monitor. A janela nova abre na aba Console, aquela em que o botão fica. Um navegador que bloqueia pop-ups não abre nada, e o feed de ações avisa: "O navegador não abriu uma segunda janela. Permita pop-ups para esta estação e tente de novo."
Quebra de linha Quebra mensagens longas em várias linhas em vez de cortá-las.
Acompanhar o fim (rolagem automática) Liga o acompanhamento (saltando para o fim e zerando a contagem de entradas novas) ou o desliga.
Limpar a visão Esvazia o feed em memória em toda superfície de uma vez: a janela da estação, todo navegador remoto e toda aba veem a mesma lista vazia. O feed de ações responde "Visão do Console limpa para a estação inteira." Os arquivos de log rotativos, os arquivos de captura e o diário de eventos ficam intocados. O runtime está parado: o botão fica cinza, e a sua dica diz que a estação não aceita nenhuma mudança agora O papel não tem Alterar configurações
Exportar Abre o menu: Exportar como CSV…, Exportar como JSON… e, depois de um separador, Criar pacote de suporte…. Criar pacote de suporte fica cinza enquanto um está sendo montado O papel não tem Exportar/importar históricos

Captura detalhada

Iniciar a captura eleva o processo inteiro ao registro verboso por até quinze minutos e escreve tudo, detalhe verboso e conversa de protocolo inclusive, num arquivo de captura próprio: logs\diagnostic-captures\ganter-temporary-diagnostic-<stamp>-<id>.log, na pasta de dados da estação (uma sessão rotaciona em 25 MB mantendo dois arquivos; as dez sessões mais recentes são guardadas). O feed de 500 entradas e o arquivo rotativo normal ficam exatamente como estavam: nada de extra chega a eles.

O botão passa então a dizer Parar a captura; a sua dica diz "Parar antes da hora a captura detalhada de diagnóstico. Iniciada hh:mm:ss." A captura para sozinha quando a contagem chega a zero, quando você aciona o botão, ou quando a aplicação é encerrada. As duas pontas são anunciadas no feed de ações ("Captura detalhada iniciada por até 15 minutos.", "Captura detalhada parada.") e deixam linhas no Console sob App · Diagnostic capture.

A captura é uma chave da estação inteira: todo circuito vê a mesma contagem regressiva, e ela sobrevive à janela que a acionou. É por isso que ela exige Alterar configurações: um papel sem essa permissão não recebe o botão desenhado, e um acionamento que ainda assim chegue ao tratador responde "Iniciar ou parar a captura detalhada exige a permissão Alterar configurações." O que a captura está fazendo não fica sob permissão nenhuma: enquanto ela grava, um mostrador ao lado do botão traz um ponto de gravação, "Captura detalhada ativa" e o tempo que falta (mm:ss, a partir de 15:00), e todo papel o lê. Quando nada está gravando, esse mesmo mostrador fica só para o leitor de tela, que diz "Captura detalhada inativa".

Criar pacote de suporte

O último item do menu Exportar monta um zip para entregar ao suporte e o baixa pelo navegador; o feed de ações responde "Pacote de suporte criado:" seguido do nome do arquivo (ganter-support-<stamp>-<id>.zip), ou "Falha no pacote de suporte:" seguido do motivo. Ele precisa de Exportar/importar históricos, como toda exportação. O pacote contém:

Entrada Conteúdo
recent-console.json As entradas do feed em memória como registros estruturados (todo campo de toda entrada, não a visão filtrada).
logs/ganter-lab-*.log Os arquivos de log rotativos normais.
diagnostic-captures/ganter-temporary-diagnostic-*.log Os arquivos de captura detalhada.
manifest.json Quando ele foi gerado, o estado da captura (ativa, iniciada, termina, parada, nome do arquivo), quantas entradas do feed foram incluídas, os limites, a lista de arquivos incluídos com os seus tamanhos, e toda omissão com o seu motivo.

Os arquivos são tomados do mais novo para o mais antigo dentro de um orçamento: no máximo 8 arquivos, no máximo 24 MB por arquivo e 96 MB no total; um arquivo maior que a sua cota entra apenas pelo fim (os seus bytes mais novos) e o manifesto diz isso. O zip é montado na pasta temporária do sistema e excluído assim que o download é servido.

O painel de detalhes

Selecionar uma entrada abre o painel com o distintivo da severidade, "Área · Componente" e um xis de fechar e, em seguida:

Seção Campo Conteúdo
Cabeçalho Instante Data e hora completas com milissegundos.
Cabeçalho Mensagem A mensagem de uma linha.
CONTEXTO Área O subsistema.
CONTEXTO Componente O produtor concreto.
CONTEXTO Logger A categoria de logger por trás da entrada, mostrada quando conhecida.
CONTEXTO Nível Debug, Informação, Alerta ou Erro.
CONTEXTO Dispositivo, Tag, Operação, Cliente, Sessão, Unidade, Procedimento, Execução Cada um mostrado só quando a entrada o carrega: o dispositivo e o tag a que uma linha do conector se refere, a operação em diagnóstico (uma leitura, uma escrita, uma conexão), o cliente e a sessão OPC ou de protocolo, e a unidade, o procedimento e o id da execução do Process.
DETALHES O texto da exceção e o stack trace, quando a entrada carregava um.

Copiar entrada, no pé, copia o painel inteiro como texto (a linha de cabeçalho, a mensagem, uma linha "Rótulo: valor" por campo de contexto e, em seguida, o bloco de detalhe) e responde "Entrada copiada para a área de transferência." A seleção é descartada se a entrada sair do buffer, e é limpa por Limpar a visão.

Exportar

Exportar como CSV… e Exportar como JSON… gravam as linhas visíveis no momento (a visão filtrada) como um download do navegador chamado app-logs-<yyyyMMdd-HHmmss>.csv ou .json; o feed de ações responde "Exportada(s) N linha(s) para" seguido do nome do arquivo. Os dois carregam as mesmas colunas, nesta ordem: Timestamp (encabeçada "Timestamp (UTC-03:00)" no CSV, a referência de tempo declarada uma vez), Severity, Area, Component, Logger, Device, Tag, Operation, Client, Session, Unit, Procedure, RunId, Message e Exception. O JSON é um envelope, { "TimeZone": "...", "Entries": [ ... ] }. Uma célula de CSV que começa com =, +, - ou @ recebe um apóstrofo na frente para que a planilha a leia como texto.

A linha de status

"N mostradas · M no buffer" e, em seguida, " · filtrado" enquanto qualquer filtro de busca, área, componente ou nível está em vigor; à direita, "1 selecionada" enquanto uma entrada está selecionada e "Atualizado hh:mm:ss", a hora da última entrada que chegou. Quando nada casa, a lista diz "Nenhuma entrada casa com os filtros atuais. Ajuste o nível, a área, o componente ou a busca para ver mais."

O que o Console não faz

  • Ele não é um registro: guarda 500 entradas em memória, as perde no reinício, e Limpar a visão o esvazia para todo mundo. O registro durável são as três linhas do tempo e, em disco, os arquivos de log rotativos.
  • Ele não mostra nada abaixo de Informação, e nunca o detalhe de protocolo; é para isso que serve uma captura detalhada.
  • Limpar a visão não exclui arquivo nenhum nem linha nenhuma do diário, é recusado enquanto o runtime está parado, e é desenhado apenas para um papel que pode alterar configurações, como Exportar e Iniciar a captura ao lado dele.
  • A captura detalhada não pode ser esticada além de quinze minutos; inicie outra.
  • Exportar grava o que está visível, nunca os arquivos em disco; o pacote de suporte é como os arquivos saem da estação.
  • Um agente com a área Logs aberta lê esse mesmo feed por logs_read (veja Ferramentas); ele não consegue limpá-lo.