Pular para o conteúdo
Documentação: Logs

Logs

O que o servidor escreve, em JSON, e onde ler.

Descreve o Ronne AI Marketplace 0.4.0. Traduzida do inglês.

Logs

O Ronne escreve uma linha por evento na saída padrão, em JSON: quando aconteceu, a gravidade, o que aconteceu e a requisição a que pertence. Para onde essa saída vai depende de como o Ronne roda:

O Ronne roda comoOs logs
Dockerdocker compose logs web (o driver de log do Docker)
Um serviço no Linuxsudo rmk-server service logs, ou journalctl -u rmk-server
Um serviço no macOSsudo rmk-server service logs, ou /Library/Logs/rmk-server/server.log
npm ou um pacote com o Node.js embutido, sem serviçoo terminal que roda rmk-server start
Um cloneo terminal que roda pnpm start, ou pnpm dev (em texto)

Uma linha é assim:

{"time":"2026-10-14T14:03:22.417Z","level":"info","msg":"Released","domain":"submissions","event":"version.released","requestId":"01K7…","userId":"01J9…","count":3}
  • Sempre: time (UTC), level e msg, uma frase curta que nunca muda.
  • Quando se aplicam: event, um nome estável para buscar e criar alertas; domain, a parte do Ronne que a escreveu; requestId, a requisição a que pertence; userId, quem a fez (um id, nunca um e-mail ou um nome); err, o nome, a mensagem e o código de um erro, com a pilha em error; com o rastreamento ligado, traceId e spanId, o span em que foi escrita (Monitoramento).
  • Os campos do próprio evento: números, contagens e motivos curtos, como status ou count.
  • As linhas do próprio Better Auth (a biblioteca de login): msg é Better Auth, com source e o texto dele em detail.

LOG_LEVEL (debug, info, warn ou error; info por padrão) define a gravidade mínima das linhas escritas: warn é o que alguém deve olhar, error uma falha, e debug acrescenta detalhes que ninguém precisa no dia a dia. Um valor desconhecido escreve um aviso e usa info. LOG_FORMAT é json, ou text para uma pessoa lendo um terminal (o padrão com pnpm dev). Defina-os no arquivo de configurações ou no ambiente (com Docker, no arquivo .env ao lado do compose.yaml, depois docker compose up -d), e reinicie o Ronne.

Os eventos:

EventoNívelQuandoCampos
server.startedinfoO servidor iniciou (antes do setup, setup: required no lugar de dialect)version, dialect, setup, runtime, port
server.migrations_appliedinfoMudanças no banco aplicadas ao iniciarcount, latest
http.requestinfo (warn para 429, error para 5xx)Uma requisição à API foi respondidamethod, route, status, ms, userId
http.errorerrorUm erro inesperadoerr, route
auth.signed_ininfoAlguém fez loginuserId
auth.sign_in_failedwarnUm login falhou (via é cli para o rmk login; reason é two_factor_required quando o rmk login enviou a senha certa de uma conta com login em duas etapas)reason, via
auth.rate_limitedwarnLogins ou pedidos de token demaislimit
auth.two_factor_startedinfoAlguém começou a configurar o login em duas etapasuserId
auth.two_factor_enabledinfoO login em duas etapas foi ativadouserId
auth.two_factor_disabledinfoO login em duas etapas foi desativadouserId
auth.two_factor_failedwarnUm código de duas etapas foi recusado no loginreason (wrong_code, used, expired, too_many, locked, refused, unreadable)
token.exchangedinfoO rmk login, ou uma aprovação no navegador, recebeu um token de acessouserId
token.rejectedwarnUm token de acesso foi recusadoreason (unknown, revoked, expired, disabled)
version.releasedinfoVersões foram lançadas (uma linha por lançamento em lote)count, userId
version.yankedinfoUma versão foi retiradauserId
draft.uploadedinfoUm rascunho foi enviadofiles, bytes
draft.upload_refusedwarnO envio de um rascunho foi recusadoreason
upload.rate_limitedwarnEnvios ou submissões demaislimit
usage.rate_limitedwarnRelatórios de uso demaislimit
submission.checks_failedwarnAs verificações do Submit não puderam rodarerr
feed.builtinfo (debug quando vem do cache)Um feed de plugins foi gerado, ou servido do cache (cached, sem plugins nem ms)tool, plugins, ms, bytes, cached
feed.size_warningwarnUm feed está perto do limite de tamanhotool, percent
feed.plugin_skippedwarnUm plugin ficou de fora de um feedtool, reason
db.unavailableerrorA verificação de saúde não alcançou o bancoerr
storage.unavailableerrorA verificação de saúde encontrou o armazenamento não gravávelerr
telemetry.startedinfoO OpenTelemetry iniciou (Monitoramento)traces, metrics
telemetry.endpoint_invalidwarnO endpoint OTLP não é uma URL http(s); a telemetria fica desligada
telemetry.failederrorO OpenTelemetry não iniciou; o servidor inicia sem eleerr
telemetry.verbose_offwarnNEXT_OTEL_VERBOSE é desligado: spans detalhados levariam nomes privados
telemetry.export_failedwarnO coletor não foi alcançado (no máximo uma vez por minuto)signal
job.startedinfoUma tarefa agendada começou (Privacidade: a limpeza de retenção)job
job.finishedinfoUma tarefa agendada terminou, com o que fezjob, ms, ipsCleared, emailsCleared, sessionsDeleted, grantsDeleted
job.skippeddebugOutra execução segura o bloqueio da tarefajob, reason
job.failederrorUma tarefa agendada falhou; a próxima roda no horáriojob, ms, err
log.level_invalidwarnLOG_LEVEL não é um nível; usa-se info

Nunca numa linha: senhas, tokens de acesso, cookies, AUTH_SECRET, a senha de um banco, e-mails, endereços IP de pessoas, nem os nomes de itens, escopos e espaços de trabalho (os nomes de um espaço de trabalho privado continuam privados). O Ronne não os escreve, e o logger ainda tira o que poderia escapar, mensagens de erro incluídas: campos com nome de segredo, tokens de acesso, senhas em endereços, e-mails, os caminhos dos arquivos guardados e o valor que um banco cita num erro de chave duplicada. O Next.js também imprime um erro inesperado por conta própria, em texto simples ao lado da linha do Ronne: esse texto é do próprio Next.js, fora do logger do Ronne. O mesmo vale para o erro que o Better Auth (a biblioteca de login) imprime quando o próprio banco falha no meio de uma requisição.

Para relatar um problema: toda resposta de página e da API traz um cabeçalho X-Request-Id, e a mensagem da API para um erro inesperado o menciona. Informe-o, e quem administra a instância encontra as linhas dessa requisição pelo requestId. Atrás de um proxy que define o próprio X-Request-Id, o Ronne o mantém com TRUST_PROXY=true, para que um só ID acompanhe a requisição.