Pular para o conteúdo principal
No ciclo de vida de um Span, oferecemos várias oportunidades para atualizar ou modificar seu estado interno. Hooks são o mecanismo para isso. Usando funções com formato específico, podemos enriquecer qualquer Span de saída com informações adicionais antes de ele ser enviado para a Push API. Ambos os tipos de hooks são um array de funções compostas que são aplicadas da direita para a esquerda. Em outras palavras, os hooks adicionados por último são sempre os primeiros a serem aplicados. Quando um Span é passado para appsignal.send(), ou um Error é passado para appsignal.sendError(), os hooks são aplicados ao Span na seguinte ordem:
  • Decorators
  • Argumentos opcionais tags ou namespace para appsignal.send()
  • Overrides
Hooks geralmente são aplicados em um plugin.
Quando um Error é passado para appsignal.sendError(), um objeto Span interno é criado, o que significa que Hooks ainda podem ser aplicados a ele normalmente.

Decorators

Pode ser necessário adicionar contexto adicional a um Span no nível global, para que todas as requisições incluam essas informações por padrão. Decorators podem ser usados para isso.

Overrides

Overrides são a última oportunidade possível para atualizar dados em um Span antes de ele ser enviado para a Push API. Por exemplo, você pode optar por remover quaisquer dados do usuário dos Spans em um override.

Escrevendo seu próprio Hook

Hooks são, essencialmente, funções que recebem um Span como único argumento e retornam o mesmo Span. Durante a execução da função, modificações podem ser feitas no Span, mas sugerimos que nenhum outro efeito colateral seja introduzido. Veja um exemplo de como você pode adicionar um Hook ao objeto Appsignal:
appsignal.addDecorator((span) => {
  return span.setTags({ customTag: "value" });
});

appsignal.addOverride((span) => {
  // scrub e-mail addresses
  const { tags } = span.serialize();

  return span.setTags({
    text: tags.text.replace(/^[^\s@]+@[^\s@]+\.[^\s@]+$/, "[SCRUBBED]"),
  });
});
Plugins também podem adicionar decorators e overrides. Se você quiser criar um hook reutilizável que possa ser empacotado em um módulo npm, por exemplo, recomendamos utilizar a interface de plugin para registrá-lo.