Registro em C++: visão geral das 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

Registro para C++: melhores soluções



O registro é uma das ferramentas mais importantes no arsenal do desenvolvedor. Ele ajuda a rastrear a execução do programa, encontrar erros, analisar o desempenho e coletar dados para depuração. Na linguagem C++ não há um sistema de registro embutido (ao contrário de Java ou Python), mas a comunidade e grandes empresas criaram muitas bibliotecas excelentes. Neste artigo, veremos as melhores soluções para registro em C++: spdlog, Boost.Log, Google glog e fmtlog. Você conhecerá suas características, vantagens e obterá exemplos de código.



Por que o registro é necessário em C++?

Em projetos modernos de C++, o registro resolve várias tarefas:

  • Depuração: gravação de valores de variáveis, pilha de chamadas, estado de objetos.
  • Monitoramento: registro do tempo de execução de funções, operações de entrada/saída.
  • Auditoria: armazenamento do histórico de ações do usuário ou sistema.
  • Diagnóstico de falhas: registro de exceções e erros críticos.

Uma boa biblioteca de registro deve ser rápida, flexível, suportar diferentes níveis de log (debug, info, warn, error, fatal) e ser capaz de enviar dados para arquivo, console ou servidor remoto.



1. spdlog — logger rápido e moderno

spdlog é a biblioteca de registro mais popular em C++ atualmente. Ela é escrita em C++ moderno (C++11/14/17), header-only (apenas arquivos de cabeçalho) e não tem dependências externas, exceto fmtlib para formatação de strings. Principais vantagens:

  • Alta performance (registro assíncrono).
  • Suporte a múltiplos sinks: arquivo, console, syslog, bancos de dados.
  • Configuração flexível de formatação.
  • API simples.

Exemplo de uso do spdlog:

#include <spdlog/spdlog.h>#include <spdlog/sinks/basic_file_sink.h>

int main() { // Criando um logger que escreve no arquivo "logs.txt" auto logger = spdlog::basic_logger_mt("file_logger", "logs.txt"); spdlog::set_default_logger(logger); spdlog::set_level(spdlog::level::debug); // Nível de log

spdlog::info("Bem-vindo ao spdlog!"); spdlog::debug("Mensagem de debug: {}", 42); spdlog::error("Erro ocorrido: {}", errno);

// Registro assíncrono spdlog::flush_on(spdlog::level::err); return 0;}

O spdlog também suporta o modo assíncrono, que é crítico para aplicações de alta carga. A configuração da assincronicidade é trivial: basta chamar spdlog::init_thread_pool(...).



2. Boost.Log — poderoso, mas pesado

Boost.Log faz parte das bibliotecas Boost. É a solução mais funcional, mas requer a instalação do Boost e pode tornar a compilação mais lenta. Características:

  • Máxima flexibilidade: filtros personalizados, formatadores, sinks.
  • Suporte a multithreading e segurança de thread.
  • Possibilidade de escrever logs em diferentes lugares simultaneamente (arquivo + console + rede).
  • Suporte a rotação de logs por tamanho, data ou hora.

Exemplo do Boost.Log:

#include <boost/log/trivial.hpp>#include <boost/log/expressions.hpp>#include <boost/log/utility/setup/file.hpp>

namespace logging = boost::log;

int main() { // Configuração de saída para arquivo logging::add_file_log("sample.log"); logging::core::get()->set_filter( logging::trivial::severity >= logging::trivial::info );

BOOST_LOG_TRIVIAL(trace) << "Uma mensagem de nível trace"; BOOST_LOG_TRIVIAL(debug) << "Uma mensagem de nível debug"; BOOST_LOG_TRIVIAL(error) << "Uma mensagem de nível error"; return 0;}

Boost.Log — escol

Recommendations