Skip to main content
Esta documentação descreve como configurar o logging com a integração AppSignal for Elixir.

Configurar logging

🔐 Não envie Informações Pessoais Identificáveis (PII) para a AppSignal. Filtre PII (por exemplo, nomes, e-mails) dos logs e use um ID, hash ou identificador pseudonimizado no lugar.

Para entidades cobertas pela HIPAA, mais informações sobre como assinar um Business Associate Agreement (BAA) podem ser encontradas em nossa documentação de Business Add-Ons.
Você não precisa criar uma fonte de log para enviar logs da integração AppSignal for Elixir. Uma fonte de log “application” será criada automaticamente.

Logger Handler

Você pode configurar o :logger do Erlang para usar o módulo Appsignal.Logger.Handler como handler, chamando a função Appsignal.Logger.Handler.add/2 no callback Application.start/2:
@impl true
def start(_type, _args) do
  Appsignal.Logger.Handler.add("phoenix")
end
O argumento fornecido é o nome do grupo que descreve de onde você está fazendo o log. Esse nome de grupo pode ser usado no AppSignal para filtrar seus logs.

Logger Backend

A partir da versão 1.15 do Elixir, os backends de logger do Elixir não são mais recomendados. Veja a seção Logger Handler acima para a alternativa recomendada.
Em vez de usar um handler de logger do Elixir, você pode configurar o backend do logger do Elixir para usar o módulo Appsignal.Logger.Backend como backend, colocando o código abaixo no arquivo config/runtime.exs:
config :logger, backends: [:console, {Appsignal.Logger.Backend, [group: "phoenix"]}]
A opção group descreve de onde você está fazendo o log. Esse nome de grupo pode ser usado no AppSignal para filtrar seus logs. Você também pode adicionar o backend usando a função add_backend/2 no callback Application.start/2:
@impl true
def start(_type, _args) do
  Logger.add_backend(Appsignal.Logger.Backend, group: "phoenix")
end

Elixir Logger

Para enviar logs ao AppSignal sem usar o backend do Elixir Logger, você pode usar uma das funções de logging do Appsignal.Logger e fornecer um groupname que define de onde você está fazendo o log. Por exemplo, se estivéssemos fazendo log a partir de um helper para faturamento de clientes:
Appsignal.Logger.info(
  "invoice_helper",
  "Generating invoice for customer 129"
)

Uso

Enviando logs

Assim como a classe de logger do Elixir/Phoenix, você pode definir o nível de severidade dos seus logs usando fatal, error, warning, info e debug:
Appsignal.Logger.warning(
  "app",
  "Something's gone terribly wrong here"
)
Você pode passar atributos personalizados como último argumento para enviar informações de log que podem ser usadas ao filtrar e consultar logs:
Appsignal.Logger.info(
  "invoice_helper",
  "Generated invoice for customer #{customer.id}",
  %{ customer_id: customer.id, invoice_id: invoice.id }
)
Você pode consultar e filtrar pelo conteúdo da mensagem e pelos valores dos atributos usando nossa sintaxe de consulta. Uma vez configurados, os atributos desejados serão enviados ao AppSignal como tags de log e poderão ser consultados na interface de logging do AppSignal.

Formatos

Formato detectado automaticamente

O pacote AppSignal for Elixir vai detectar automaticamente o formato da linha de log como JSON, Logfmt ou plaintext por padrão, e fará o parsing dos atributos a partir disso. Você não precisa definir manualmente o formato do log, a não ser que ele não esteja sendo detectado corretamente. Por favor, também nos avise se isso não estiver funcionando automaticamente.
# Plaintext format
Appsignal.Logger.info(
  "invoice_helper",
  "Generated invoice"
)
# Logfmt format
Appsignal.Logger.info(
  "invoice_helper",
  "Generated invoice invoice_id=A145 for customer customer_id=123"
)
# JSON format
Appsignal.Logger.info(
  "invoice_helper",
  ~s({"message": "Generated invoice for customer", "invoice_id": "A145", "customer_id": "123"})
)

Logfmt

O AppSignal Logger pode ser configurado explicitamente para esperar que a linha esteja formatada como Logfmt e fazer o parsing dos atributos a partir dela. Use essa opção quando estiver usando uma versão mais antiga do pacote AppSignal for Elixir, que não suporta a detecção automática de formato. O formato Logfmt pode ser especificado quando o AppSignal logger é chamado, adicionando o valor :logfmt como último argumento.
Appsignal.Logger.info(
  "invoice_helper",
  "Generated invoice invoice_id=A145 for customer customer_id=123",
  :logfmt
)

JSON

O AppSignal Logger pode ser configurado explicitamente para esperar que a linha esteja formatada como JSON e fazer o parsing dos atributos a partir dela. Use essa opção quando estiver usando uma versão mais antiga do pacote AppSignal for Elixir, que não suporta a detecção automática de formato. O formato JSON pode ser especificado quando o AppSignal logger é chamado, adicionando o valor :json como último argumento.
Appsignal.Logger.info(
  "invoice_helper",
  ~s({"message": "Generated invoice for customer", "invoice_id": "A145", "customer_id": "123"}),
  :json
)
Apenas valores primitivos não aninhados (números, strings, booleanos e null) serão exibidos como atributos de log. Todos os outros atributos serão descartados.

Filtrando logs

Você pode usar a opção de configuração ignore_logs para ignorar linhas de log com base na mensagem. Veja nosso guia Ignore Logs para saber mais.

Precisa de ajuda?

Depois de configurar sua aplicação Elixir para enviar logs, os logs devem aparecer no AppSignal. Se você tiver dúvidas sobre este passo ou o AppSignal não estiver recebendo logs, você sempre pode entrar em contato para obter ajuda. Vamos te ajudar a voltar ao normal!