all_logger 1.0.1
all_logger: ^1.0.1 copied to clipboard
Composable zero-dependency logging for pure Dart with levels, environment filters, customizable formatting, multi-output routing, and test capture.
all_logger #
🇧🇷 Português | 🇺🇸 English
Logging extensível em Dart puro, com níveis, filtros, printers e outputs combináveis. O pipeline separado mantém o logging testável sem acoplar o núcleo ao Flutter.

Por que usar #
Logs úteis precisam ser filtrados, formatados e enviados ao destino certo sem
espalhar decisões de ambiente pelo código. all_logger separa essas etapas em
um pipeline pequeno, permitindo trocar console por DevTools, memória ou um
adapter próprio sem alterar as chamadas de log da aplicação.
- Uma API consistente para Flutter, CLI, servidor e bibliotecas Dart.
- Verbosidade controlada por ambiente e nível mínimo.
- Formatação independente do destino.
- Um evento pode seguir para vários outputs simultaneamente.
- Erro e stack trace preservados no registro.
- Testes determinísticos com captura em memória.
- Dart puro e zero dependências de runtime.
Recursos #
- Níveis
trace,debug,info,warning,errorefatal. - Release bloqueado por padrão, com ativação explícita quando necessária.
- Filtros para desenvolvimento, produção, todos ou nenhum registro.
BrSimplePrintereBrPrettyPrintercom ícones por padrão.BrLogThemepara override de cores ANSI e ícones por nível.- Outputs para console,
dart:developer, memória e múltiplos destinos. - Registros com mensagem, tag, horário, erro e stack trace.
Guia rápido da API #
| Necessidade | API |
|---|---|
| Registrar eventos | trace, debug, info, warning, error, fatal |
| Tudo fora de release e nenhum log em release | BrDevelopmentFilter padrão |
| Ativar release conscientemente | allowInRelease: true ou BrProductionFilter |
| Definir um nível mínimo fixo | BrProductionFilter |
| Habilitar ou silenciar completamente | BrAllFilter, BrNullFilter |
| Saída legível no terminal | BrPrettyPrinter + BrPrintOutput |
| Linha simples para CI, arquivo ou DevTools | BrSimplePrinter |
| Integrar com Flutter DevTools | BrDeveloperOutput |
| Inspecionar logs em testes | BrMemoryOutput |
| Enviar para vários destinos | BrMultiOutput |
| Integrar arquivo, rede ou telemetria | implemente BrLogOutput |
Instalação #
dependencies:
all_logger: ^1.0.1
Exemplos de uso real #
Configuração mínima #
import 'package:all_logger/all_logger.dart';
final log = BrLogger(tag: 'Auth');
log.info('login concluído');
log.warning('sessão próxima do vencimento');
log.dispose();
Pipeline de produção com múltiplos destinos #
final memory = BrMemoryOutput();
final log = BrLogger(
tag: 'Checkout',
filter: const BrProductionFilter(minLevel: BrLogLevel.warning),
printer: const BrSimplePrinter(showTime: true),
output: BrMultiOutput([
const BrDeveloperOutput(),
memory,
]),
);
log.info('pedido recebido'); // descartado pelo filtro
log.warning('gateway com latência elevada');
O filtro roda antes da formatação e do output, evitando trabalho para eventos descartados.
Erros com contexto de diagnóstico #
try {
await repository.confirmOrder(orderId);
} catch (error, stackTrace) {
log.error(
'falha ao confirmar pedido',
error: error,
stackTrace: stackTrace,
);
}
A mensagem deve descrever a operação; o objeto de erro e o stack trace ficam
em campos próprios do BrLogRecord.
Testes sem depender do console #
final output = BrMemoryOutput(maxRecords: 20);
final log = BrLogger(
tag: 'Auth',
filter: const BrAllFilter(),
printer: const BrSimplePrinter(showTime: false),
output: output,
);
log.warning('sessão expirada');
expect(output.records.single.level, BrLogLevel.warning);
expect(output.records.single.message, 'sessão expirada');
maxRecords deve ser maior que zero. Limites iguais ou menores que zero são
rejeitados no construtor com ArgumentError.
Adapters próprios #
Implemente BrLogFilter para regras de seleção, BrLogPrinter para JSON ou
outro formato e BrLogOutput para arquivo, observabilidade ou transporte. O
núcleo permanece independente do fornecedor escolhido.
Cores e ícones #
Ícones vêm ligados por padrão nos dois printers. Cores ANSI vêm ligadas no
BrPrettyPrinter e podem ser sobrescritas por nível:
const terminalTheme = BrLogTheme(
infoColor: BrAnsiColor.cyan,
warningColor: '\x1B[38;5;208m',
errorIcon: '⛔',
fatalIcon: '☠',
);
final log = BrLogger(
printer: const BrPrettyPrinter(
theme: terminalTheme,
useColors: true,
showIcons: true,
),
output: const BrPrintOutput(),
);
No Terminal do macOS, use BrPrintOutput com BrPrettyPrinter. O
BrDeveloperOutput envia eventos para dart:developer; Xcode, DevTools ou a
IDE decidem a apresentação e podem ignorar ANSI. Para esses destinos, prefira
BrSimplePrinter: os ícones continuam visíveis mesmo sem cores.
Release desligado por padrão #
BrLogger() usa BrDevelopmentFilter, que aceita todos os níveis fora de
product/release e bloqueia todos em release. Para liberar conscientemente:
final log = BrLogger(
filter: const BrDevelopmentFilter(
allowInRelease: true,
minLevelProduction: BrLogLevel.error,
),
);
Escolher BrProductionFilter ou BrAllFilter também é uma ativação explícita.
O filtro roda antes do printer e do output. Como Dart avalia argumentos antes
da chamada, não construa mensagens sensíveis ou caras supondo que o filtro
evitará essa avaliação.
Quando usar #
Use all_logger quando aplicações ou bibliotecas precisam de logging leve,
testável e configurável sem adotar um framework de observabilidade completo.
Ele funciona especialmente bem como porta de logging da arquitetura: o código
produz registros e a composição define política, formato e destino.
O pacote não remove dados sensíveis, rotaciona arquivos, persiste logs ou envia
telemetria por conta própria. Nunca registre senhas, tokens, chaves ou
documentos completos. Outputs customizados possuem uma API síncrona; não faça
I/O lento diretamente em write — use buffering ou encaminhamento adequado no
adapter. Chame dispose para liberar os recursos do output.
Documentação #
Consulte a referência, a arquitetura, o guia de contribuição e a política de segurança. Licença MIT.