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.
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.
Busca
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.