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 Informação, cautela para Aviso, crítico para Erro), "Área · Componente" e a mensagem. O botão Copiar a 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 "Busque 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, Informação, Aviso 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, Server, Connector, Logic, Process, Dashboard, Agent, Licensing 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.
Server 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.
Agent O que um agente de IA fez via MCP.
Licensing 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 uma 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. Libere as janelas pop-up para esta estação e tente de novo."
Quebrar 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 "O pacote de suporte falhou:" 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 Origem do registro A categoria de logger por trás da entrada, mostrada quando conhecida.
CONTEXTO Nível A palavra do chip do nível: Informação, Aviso ou Erro. Debug nunca aparece, porque nenhuma entrada abaixo de Informação entra no feed.
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 a 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 "Exportadas N linhas 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 entrada mais recente do buffer, já ao abrir a página. Quando nada casa, a lista diz "Nenhuma entrada combina 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.