Registro para C++: melhores bibliotecas e soluções

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Logging para C++: melhores soluções



Logging é um componente criticamente importante de qualquer projeto C++ sério. Ele ajuda a rastrear a execução do programa, encontrar erros, analisar desempenho e auditar ações de usuários. Diferente do Python, onde o módulo embutido logging é o padrão de facto, em C++ não existe uma solução embutida única. No entanto, a comunidade criou várias bibliotecas poderosas e flexíveis. Neste artigo, vamos analisar as melhores delas: spdlog, Google glog, Boost.Log e Easylogging++.



Critérios para escolher uma biblioteca de logging

Antes de prosseguir com a visão geral, é importante entender no que prestar atenção ao escolher:

  • Desempenho: impacto mínimo na velocidade de execução da aplicação.
  • Flexibilidade: possibilidade de configurar formatos, níveis de logging (DEBUG, INFO, WARN, ERROR) e saídas (arquivo, console, syslog).
  • Simplicidade de integração: bibliotecas header-only são preferíveis para projetos pequenos.
  • Suporte a multithreading: segurança em threads e gravação assíncrona.
  • Licença: compatibilidade com projetos comerciais (MIT, Apache, Boost).


1. spdlog — o mais rápido e moderno

spdlog é uma biblioteca header-only (opcionalmente compilável), escrita em C++11/14/17. Ela é merecidamente considerada a mais popular devido à sua velocidade relâmpago e consumo mínimo de memória. spdlog suporta logging assíncrono, o que é especialmente importante para sistemas de alta carga.

Principais funcionalidades:

  • Segurança em threads pronta para uso.
  • Múltiplos sinks: arquivos, console, syslog, rotatable files, daily files.
  • Suporte a formatadores personalizados (baseados em fmtlib).
  • Modo assíncrono com fila de mensagens.
  • Logging condicional.

Exemplo de uso:

#include "spdlog/spdlog.h"#include "spdlog/sinks/basic_file_sink.h"

int main() { // Criamos um logger que escreve em arquivo auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log"); spdlog::set_default_logger(file_logger); spdlog::set_level(spdlog::level::debug);

// Registramos mensagens spdlog::info("Aplicação iniciada"); spdlog::warn("Comportamento suspeito detectado: {}", 42); spdlog::error("Erro crítico: {}", errno);

// Logging assíncrono spdlog::flush_every(std::chrono::seconds(3)); return 0;}

Quando escolher: para projetos modernos onde a velocidade é crítica. Ideal para jogos, servidores em tempo real e sistemas embarcados.



2. Google glog — um padrão testado pelo tempo

Google glog (Google Logging Library) é uma biblioteca desenvolvida pela Google para necessidades internas. Ela é simples, confiável e usada em milhares de projetos ao redor do mundo. glog não tenta ser o mais rápido, mas fornece todas as funções necessárias para logging em produção.

Características:

  • Rotação automática de logs por tamanho.
  • Níveis de logging: INFO, WARNING, ERROR, FATAL (com abort).
  • Logging condicional (LOG_IF, LOG_EVERY_N).
  • Suporte a stack trace em erros fatais.
  • Dependência mínima — apenas pthreads.

Exemplo de uso:

#include <glog/logging.h>

int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]); FLAGS_log_dir = "./logs"; FLAGS_minloglevel = google::INFO;

LOG(INFO) << "Servidor iniciado na porta " << 8080; LOG(WARNING) <<

Recommendations