Sobre o projeto
Quill é uma biblioteca assíncrona de logging e métricas para C++17 e versões posteriores, voltada a aplicações críticas de desempenho e sensíveis à latência. Seu design central mantém a formatação e a E/S fora da thread chamadora: os argumentos de log são codificados no frontend e processados por um worker de backend dedicado, de modo que a formatação custosa ocorre longe dos caminhos críticos.
Principais capacidades descritas no README:
- Processamento assíncrono: uma thread em segundo plano cuida da formatação e da E/S, mantendo as threads da aplicação responsivas.
- Publicação de métricas: amostras de métricas pré-registradas podem ser enviadas pelo mesmo backend assíncrono. Um sink Prometheus incluído lida com contadores, gauges, histogramas e summaries, e sinks personalizados podem encaminhar amostras para StatsD, OpenTelemetry ou outros coletores no processo.
- Pegada mínima de headers: o frontend precisa apenas de Logger.h e LogMacros.h, enquanto o backend é incluído por um único arquivo .cpp, evitando a injeção de código de backend em outras unidades de tradução.
- Opções em tempo de compilação: níveis de log podem ser eliminados em tempo de compilação, e as filas do frontend e a política de memória podem ser ajustadas em tempo de compilação.
- Configuração em tempo de execução: o comportamento ocioso do backend, afinidade de CPU, buffering, tratamento de timestamps, flushing e callbacks podem ser configurados, e os loggers podem ser compostos a partir de sinks internos ou personalizados com filtros por sink.
- Timestamps: suporte a rdtsc, chrono ou relógios personalizados, com comparação de timestamps entre threads e uma janela de tolerância configurável para produtores atrasados.
- Sinks e saída: console (com cor), arquivos (com rotação), JSON, além de sinks personalizados.
- Recursos adicionais: logging de backtrace via ring buffer, filtragem de logs, logging estruturado em JSON, mapped diagnostic context (MDC), macros com limitação de taxa, modos de fila configuráveis limitados/ilimitados e bloqueantes/descartáveis com monitoramento, tratamento de falhas via signal handler, suporte a huge pages no Linux, suporte a caracteres largos no Windows e uma opção de build sem exceções.
- API type-safe construída sobre a biblioteca {fmt}.
A instalação está disponível por vários gerenciadores de pacotes, incluindo vcpkg, Conan, Homebrew, Meson WrapDB, Conda, Bzlmod, xmake, nix e build2. Um caminho de início rápido usa simple_logger() para saída em console ou arquivo, enquanto uma configuração detalhada expõe as APIs Backend e Frontend para controle explícito sobre sinks, loggers e formatadores. Também é oferecida uma API de funções sem macros, descrita como um pouco mais lenta que a API com macros.
O README inclui tabelas de benchmark comparando o Quill com outras bibliotecas de logging em C++ em cenários como logging de números, strings grandes e tipos complexos, com uma e quatro threads. Esses resultados são apresentados com uma configuração de sistema e metodologia de benchmark específicas, e devem ser lidos como medições do próprio projeto, e não como verificação independente.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.