Impressoras de Log topic

Impressoras de Log

Este módulo implementa o padrão Strategy para a saída de logs. Cada impressora define como os logs serão formatados e enviados para o destino final (console, terminal, etc.).


LogPrinterBase

Classe abstrata que define o contrato para todas as impressoras de log.

abstract class LogPrinterBase {
  const LogPrinterBase();

  void printLog(LoggerObjectBase log);
}

Para criar uma impressora customizada, estenda LogPrinterBase e implemente printLog:

class MinhaImpressora extends LogPrinterBase {
  const MinhaImpressora();

  @override
  void printLog(LoggerObjectBase log) {
    // Enviar para um serviço remoto, banco de dados, etc.
    myRemoteService.send(log.toJson());
  }
}

Registre-a no startup:

void main() {
  registerLogPrinter(
    const MinhaImpressora(),
    config: const ConfigLog(enableLog: true),
  );
  runApp(MyApp());
}

LogSimplePrint

Impressora simples sem formatação colorida. Usa print() para escrever a saída.

class LogSimplePrint extends LogPrinterBase {
  const LogSimplePrint();

  @override
  void printLog(LoggerObjectBase log);
}

Formato de saída:

[NomeDaClasse] dd/MM/yyyy HH:mm:ss.SSS Mensagem do log

Quando usar:

  • Ambientes sem suporte a ANSI (terminais básicos, CI/CD, serviços de log externos)
  • Testes automatizados onde a leitura precisa ser limpa
  • Produção com logs em arquivo

Exemplo:

registerLogPrinter(
  const LogSimplePrint(),
  config: const ConfigLog(
    enableLog: true,
    onlyClasses: {DebugLog, ErrorLog},
  ),
);

Atalho equivalente:

registerLogPrinterSimple(
  config: ConfigLog(enableLog: true),
);

LogWithColorPrint

Impressora avançada com formatação colorida usando códigos ANSI. Usa dart:developer.log() para enviar blocos formatados.

class LogWithColorPrint extends LogPrinterBase {
  const LogWithColorPrint();

  @override
  void printLog(LoggerObjectBase log);
}

Formato de saída:

 
=-=-=-=-=-=-=-=-=-=-=--==-=-=-=-=-=-=-=-=-=-=-=-=-=-   ← separador colorido
dd/MM/yyyy HH:mm:ss.SSS Mensagem do log               ← mensagem com cor
=-=-=-=-=-=-=-=-=-=-=--==-=-=-=-=-=-=-=-=-=-=-=-=-=-   ← separador colorido

O name do log enviado ao dart:developer.log é a className em maiúsculas com a cor do tipo de log, facilitando a filtragem por origem em IDEs e visualizadores de log.

Quando usar:

  • Desenvolvimento local (IDEs como VS Code e Android Studio preservam ANSI)
  • Depuração visual com diferenciação por cores
  • Ambientes que suportam dart:developer

Exemplo:

registerLogPrinter(
  const LogWithColorPrint(),
  config: const ConfigLog(enableLog: true),
);

Atalho equivalente:

registerLogPrinterColor(
  config: ConfigLog(enableLog: true),
  maxLogsInCache: 200,
);

Comparativo

Impressora Saída ANSI Uso recomendado
LogSimplePrint print() Testes, CI/CD, produção
LogWithColorPrint dart:developer.log() Desenvolvimento local

Classes

LogPrinterBase Impressoras de Log
Classe base abstrata para impressoras de logs.
LogSimplePrint Impressoras de Log
Impressora simples de logs.
LogWithColorPrint Impressoras de Log
Impressora de logs que preserva cor/estilo ANSI.