Clojure:
Registro de Logs
Como fazer:
Clojure se apoia nas facilidades de log do Java, mas você pode acessá-las de uma maneira mais idiomática de Clojure. Vamos dar uma olhada em como você pode usar clojure.tools.logging
, que oferece uma abstração simples sobre vários frameworks de log:
Primeiro, adicione uma dependência para clojure.tools.logging
e uma implementação de log como log4j
no seu project.clj
:
:dependencies [[org.clojure/clojure "1.10.3"]
[org.clojure/tools.logging "1.1.0"]
[log4j/log4j "1.2.17"]]
Agora, vamos registrar algumas mensagens:
(require '[clojure.tools.logging :as log])
(defn compute-answer-to-everything []
(log/debug "Iniciando um cálculo intenso...")
(Thread/sleep 3000) ; Simulação de um longo cálculo
(log/info "Cálculo concluído. A resposta é 42.")
42)
(compute-answer-to-everything)
A saída não mostrará mensagens DEBUG
por padrão, já que os níveis de log são normalmente configurados para INFO
:
INFO [seu-namespace] - Cálculo concluído. A resposta é 42.
Você pode configurar os níveis de log e os appenders em um arquivo log4j.properties
para obter uma saída mais verbosa, se necessário.
Mergulho Profundo
clojure.tools.logging
do Clojure existe há algum tempo e serve como uma ponte entre o código Clojure e o mundo de log do Java. Historicamente, o Java já passou por várias iterações e bibliotecas para registro de logs, como a API de log embutida do Java, log4j
, slf4j
, e logback
.
No Clojure, enquanto você pode usar diretamente os frameworks de log do Java, clojure.tools.logging
detecta e delega ao framework de log que encontrar em seu classpath, evitando que você fique estritamente acoplado a uma implementação específica. Isso pode ajudar a manter seu código Clojure mais portátil e modular.
Alternativas ao clojure.tools.logging
dentro do ecossistema Clojure incluem bibliotecas como timbre
, que é uma biblioteca de log puramente Clojure com recursos como rotação de logs, filtragem e logging assíncrono já inclusos.
Detalhes de implementação são cruciais quando se trata de registro de logs em um ambiente com múltiplas threads como o Clojure. Aqui, imutabilidade e o gerenciamento de efeitos colaterais oferecem vantagens distintas. O registro de logs, como um efeito colateral, deve ser tratado com cuidado para evitar gargalos de desempenho e garantir a segurança entre as threads, algo que a maioria dos frameworks de log do Java já cuida.
Por último, considere o uso de log estruturado, onde os logs são escritos como dados estruturados (como JSON). Isso pode ser extremamente útil para análises e processamentos posteriores, particularmente ao lidar com sistemas distribuídos em larga escala.
Veja Também
Se você quer saber mais, considere consultar estes recursos:
- Documentação do Clojure Tools Logging: https://github.com/clojure/tools.logging
- Timbre, uma biblioteca de log Clojure: https://github.com/ptaoussanis/timbre
- Configurando Log4J no Clojure: http://clojure-doc.org/articles/tutorials/logging_with_log4j.html
- Manual do Logback para configurações avançadas: http://logback.qos.ch/manual/
- Um guia sobre log estruturado em Clojure: https://corfield.org/blog/2020/04/28/structured-logging/