log_custom_printer
Biblioteca Dart para logging customizado com serialização JSON, formatação colorida ANSI e injeção de dependência (get_it). Adequada para CLI, servidores e scripts; também utilizável em apps Flutter após registar a impressora no arranque.
v3.0.0 — Biblioteca Dart pura (sem dependência de Flutter). A API de registro (
registerLogPrinter,registerLogPrinterColor,registerLogPrinterSimple) continua a devolverLoggerPersistenceServicecom cache integrado. O console visual Flutter deixou de fazer parte deste pacote; ver ConsoleView.md.
Funcionalidades
- Hierarquia de logs tipada:
DebugLog,InfoLog,WarningLog,ErrorLog - Formatação colorida: códigos ANSI no terminal
- Serialização JSON: com
json_serializable - Configuração flexível: filtragem por tipos e habilitação
- Cache: memória e persistência opcional em ficheiro JSON
- I/O seguro em concorrência: serialização por caminho no
FileManager - Injeção de dependência:
registerLogPrinter,registerLogPrinterColor,registerLogPrinterSimple - Mixin:
LoggerClassMixinpara integração em classes - Rastreabilidade: origem via
className/runtimeType
Instalação
Adicione no pubspec.yaml:
dependencies:
log_custom_printer:
git:
url: https://github.com/saulogatti/log_custom_printer.git
# ou path local:
# path: ../log_custom_printer
dart pub get
Requisitos: Dart SDK ^3.11.0
Uso básico
Configuração inicial (obrigatório antes de emitir logs)
import 'package:log_custom_printer/log_custom_printer.dart';
void main() {
final persistenceService = registerLogPrinterColor(
config: ConfigLog(enableLog: true),
maxLogsInCache: 100,
cacheFilePath: '/caminho/para/salvar/logs', // opcional
);
// Em Flutter: runApp(const MyApp());
}
Sistema de cache
registerLogPrinterColor e registerLogPrinterSimple devolvem um LoggerPersistenceService para leitura, consulta e limpeza. Com cacheFilePath, o FileManager serializa escrita por caminho para evitar condições de corrida.
final allLogs = await persistenceService.getAllLogs();
final errorLogs = await persistenceService.getLogsByType(EnumLoggerType.error);
await persistenceService.clearLogs();
await persistenceService.clearLogsByType(EnumLoggerType.debug);
Para armazenamento personalizado, implemente ILoggerCacheRepository e passe em registerLogPrinter(printer, cacheRepository: ..., config: ...).
Mixin (recomendado)
class MinhaClasse with LoggerClassMixin {
void minhaFuncao() {
logDebug('Iniciando função');
logInfo('Processando dados...');
try {
logInfo('Sucesso');
} catch (error, stackTrace) {
logError('Erro: $error', stackTrace);
}
}
}
Objetos de log e JSON
final debugLog = DebugLog('Mensagem de debug', typeClass: runtimeType);
debugLog.sendLog();
final errorLog = ErrorLog('Falha', StackTrace.current, typeClass: runtimeType);
errorLog.sendLog();
final json = debugLog.toJson();
final restaurado = DebugLog.fromJson(json);
Configuração avançada
void main() {
registerLogPrinterColor(
config: ConfigLog(
enableLog: true,
onlyClasses: {DebugLog, ErrorLog},
),
);
// Em Flutter: runApp(const MyApp());
}
Regras de entrega
ConfigLog.enableLog == false: descarta a maioria dos logs;ErrorLogcontinua viaalwaysPrint.ConfigLog.onlyClasses: se não vazio, só tipos listados são aceites.LoggerClassMixin: preencheclassNamecom oruntimeTypeda classe emissora.- Repositório de cache: mantém até
maxLogEntriespor tipo (comportamento conforme implementação do repositório).
Arquitetura (resumo)
LoggerObject/LoggerObjectBase— hierarquia e envio de logsLogPrinterService— impressão e cache (viaget_it)registerLogPrinter/registerLogPrinterColor/registerLogPrinterSimpleConfigLog— filtros eenableLogLoggerPersistenceService— consulta ao cache após registoILoggerCacheRepository— persistência customizável
Tipos de log
| Tipo | Cor ANSI | Uso |
|---|---|---|
DebugLog |
Amarelo | Depuração |
InfoLog |
Branco | Informação |
WarningLog |
Verde | Avisos |
ErrorLog |
Vermelho | Erros (alwaysPrint) |
Impressoras
LogSimplePrint— saída simples (sem cores ANSI na estratégia padrão)LogWithColorPrint— saída com cores ANSI
Atalhos: registerLogPrinterColor / registerLogPrinterSimple; impressora própria: registerLogPrinter(LogPrinterBase(), config: ...).
Console visual (Flutter)
A UI de consola em tempo real não está neste repositório na v3. Para migrar a partir da v2 ou integrar um pacote à parte, consulte docs/ConsoleView.md.
Desenvolvimento
dart pub get
dart run build_runner build --delete-conflicting-outputs
# ou: ./ci.sh -build
dart analyze
dart test
dart doc
A documentação API gerada por omissão fica em doc/api. Não utilize o diretório docs/ como saída do dart doc — essa pasta contém guias em Markdown do projeto.
Novos tipos de log
- Estender
LoggerObjectBase @JsonSerializable()epartgeradogetColor(),fromJson,toJson- Registar em
logger_json_list.dartse aplicável ao projeto - Exportar na API pública e correr
build_runner
Documentação
| Ficheiro | Conteúdo |
|---|---|
| README.md | Visão geral (esta página) |
| CHANGELOG.md | Histórico de versões |
| docs/Core.md | Núcleo e injeção de dependência |
| docs/LogTypes.md | Tipos de log |
| docs/Printers.md | Estratégias de impressão |
| docs/Configuration.md | Configuração e filtros |
| docs/Utilities.md | Utilitários e cache |
| docs/ConsoleView.md | Migração / consola Flutter à parte |
| docs/DOCUMENTATION.md | Arquitetura expandida |
Contribuições
- Manter a API pública estável
- Registar alterações relevantes no
CHANGELOG.md - Correr testes antes de PRs
- Seguir Effective Dart
Licença
Termos no ficheiro LICENSE do repositório.
Libraries
- log_custom_printer Core - Sistema de Logging
- Biblioteca de logging para projetos Dart (CLI, servidor, scripts).
Core - Sistema de Logging
Core — Sistema de Logging