Acidificante Haskell Como Usar
Este guia prático explica como usar acidificante Haskell em projetos reais, cobrindo desde configuração até aplicação em código com exemplos claros.
O que você vai construir com acidificante Haskell
No fim deste artigo, você saberá configurar um ambiente Haskell com acidificante, integrar logs coloridos e estruturados e aplicar as melhores práticas para depuração e rastreamento em produção.
requisitos e ferramentas necessárias
- GHC (versão 8.10 ou superior) e Cabal ou Stack
- Biblioteca acidificante (ou fast-logger para alternativa leve)
- Editor de texto ou IDE com suporte a Haskell
- Conhecimento básico de conceitos de assíncrono e gerenciamento de recursos
passo 1: preparar o ambiente Haskell
Antes de usar acidificante, garanta que seu ambiente esteja configurado corretamente.

inicializar um projeto novo
Com Cabal:
cabal update && cabal install --lib acidification
Com Stack, no stack.yaml, defina resolver compatível com LTS recente e adicione acidificante nas dependências.
passo 2: adicionar dependências ao seu projeto
Atualize o arquivo .cabal ou package.yaml incluindo acidificante e, se desejar, fast-logger para transporte otimizado.

- acidificante: para logs estruturados e assíncronos
- fast-logger: buffer eficiente e saída em arquivo
- optparse-applicative: para CLI flexível
passo 3: configurar o sistema de logs
definir o formador de mensagens
Use defaultBufSize e escolha entre logStrLn e toLogStr para converter mensagens.
escolher o backend de saída
- Console: consoleBackend para depuração rápida
- Arquivo: fileBackend com rotação via rotateDriver
- Syslog: syslogBackend para integração com infraestrutura
passo 4: integrar acidificante ao código
exemplo básico em Main.hs
import System.Log.FastLogger main = do (writeLog, close) <- newFileLoggerSet defaultBufSize "app.log" pushLogStrLn writeLog (toLogStr "App inicializada com sucesso") -- ... resto da aplicação close
logs assíncronos com acidificante
Com async e forkIO, mantenha a thread principal responsiva enquanto as threads de buffer gravam em disco.
passo 5: práticas avançadas e otimizações
níveis de severidade
Defina LogLevel para DEBUG, INFO, WARN e ERROR e filtre no setLogLevel conforme o ambiente.

formatação padronizada
Use fromString e showLogStr para prefixos de carimbo de data/hora, thread ID e módulo.
controle de recursos
Empacote handles com bracket para evitar vazamentos mesmo em falhas.
dicas de performance e segurança
- Ajuste o tamanho do buffer para reduzir I/O em disco
- Evite stringificação custosa em logs de baixo nível
- Proteja variáveis sensíveis antes de registrar
- Monitore o crescimento do arquivo de logs
como depurar problemas comuns
- Logs vazios: verifique se o writeLog está sendo chamado e se o buffer foi liberado (flushLogSet)
- Deadlock em concorrência: use tryWithDebug e limite o número de threads de escrita
- Performance lenta: aumente o intervalo de rotação e use noBuffering se a latência for crítica
dicas de manutenção
Monitore o tamanho dos arquivos, valide a rotação noturna e mantenha um script de limpeza para evitar crescimento descontrolado.

perguntas frequentes
posso usar acidificante Haskell em produção sem problemas?
Sim, desde que você configure rotação de arquivos, ajuste níveis de log e valide o throughput em carga real.
como integrar com frameworks web como yesod ou servant?
Insira o logFunc no seu App via wai e use monadLogger para injetar mensagens em handlers.
existe uma alternativa mais moderna ao acidificante puro?
Considere katip para projetos que precisam de contexto rico e agregação distribuída.
