Elixir:
Registro de Logs
Como fazer:
Em Elixir, a maneira primária de registrar informações é através do módulo Logger
integrado. Veja como você pode usá-lo:
defmodule MyApplication do
require Logger
def do_something_important(param) do
Logger.info("Iniciando processo importante com o parâmetro: #{param}")
# Simula trabalho sendo feito
:timer.sleep(1000)
Logger.debug("Processo completado.")
rescue
error -> Logger.error("Ocorreu um erro: #{inspect(error)}")
end
end
# Para ver seus registros, você apenas chama a função:
MyApplication.do_something_important("MeuParametro")
Este simples trecho mostra como registrar em diferentes níveis (info
, debug
e error
). Quando você executar isso, não verá a mensagem de debug, a menos que configure o nível do Logger para :debug
. Por padrão, o Logger do Elixir filtra mensagens de registro abaixo de :info
.
Uma saída de exemplo no nível :info
poderia parecer assim:
14:32:40.123 [info] Iniciando processo importante com o parâmetro: MeuParametro
14:32:41.126 [error] Ocorreu um erro: %RuntimeError{message: "erro de execução"}
Aprofundando:
O Logger
do Elixir é uma ferramenta integrada que faz parte da linguagem desde seus primeiros dias. Ele é influenciado pelos sistemas de registro de outras linguagens BEAM, como Erlang. O logger oferece diferentes níveis de registro – :debug
, :info
, :warn
e :error
– e é plugável, permitindo que diferentes backends sejam conectados para o manuseio de mensagens de registro.
Uma alternativa ao Logger integrado para cenários mais complexos é o uso de bibliotecas de registro como o Logstash
ou o Sentry
para Elixir, que podem fornecer recursos adicionais como rastreamento e agregação de erros em um formato mais visual. Para desenvolvimento local, os desenvolvedores de Elixir muitas vezes confiam na funcionalidade do Logger integrado pela sua simplicidade e integração com a BEAM VM.
Por baixo dos panos, o módulo Logger oferece registro assíncrono e síncrono. O registro assíncrono, que é o padrão, não bloqueia a execução da sua aplicação durante o registro das mensagens. Isso garante que o registro não afete negativamente o desempenho. No entanto, o registro síncrono pode ser habilitado para casos onde você precisa garantir que as mensagens sejam registradas na ordem em que foram enviadas.
A configuração do Logger pode ser ajustada no arquivo config/config.exs
de uma aplicação Elixir, onde você pode definir o nível de registro, formato, metadados e mais. Lembre-se sempre de ajustar seus níveis de registro e saídas para diferentes ambientes; você não iria querer registros de debug verbosos inundando seus sistemas de produção.
Veja também:
- A documentação oficial do Logger do Elixir: https://hexdocs.pm/logger/Logger.html
- Um post no blog sobre as melhores práticas de registro no Elixir: https://blog.appsignal.com/2020/05/06/elixir-logging-tips-and-tricks.html
- Sentry para Elixir no Hex: https://hex.pm/packages/sentry
- A lição do Elixir School sobre Logger: https://elixirschool.com/en/lessons/specifics/debugging/#logging