Estou trabalhando em um aplicativo multi-thread de desempenho crítico. Eu olhei para o registro de rlog, Ace e Boost. Escolhi rlog porque li que é o mais rápido (quando o log está desabilitado, ele tem menos overhead).
O problema que tenho é que mostra o nome do arquivo, o número da linha, etc., mesmo no modo de liberação. Se você puder me dizer como desligar essas informações, meu problema pode ser resolvido. Em qualquer caso, qual é o logger mais eficiente em C ++ para minha situação?
Respostas:
Infelizmente, não posso votar contra ele no momento. Tanto quanto posso dizer, nunca use porcarias como o Apache log4cxx. Ele contém bugs graves.
Na minha opinião, você deve ir com impulso.
fonte
Pantheios é considerada a biblioteca de registro C ++ de melhor desempenho , além de ser a única 100% segura (consulte este artigo sobre uma biblioteca relacionada explicando por que as bibliotecas baseadas em printf () / iostream não são de tipo seguro)
fonte
Tive sucesso com log4cxx em http://logging.apache.org/log4cxx/index.html . É uma versão C ++ do popular logger Log4j, fácil de configurar por meio de um arquivo conf ou no código. A sobrecarga quando está desabilitada é mínima (chamada de método e comparação de inteiro).
O padrão para a saída do log é definido por um padrão de conversão que pode ser tão simples quanto a data / hora e uma mensagem. Ele também lida com limitação de tamanho de arquivo, rollover, etc. Você também pode configurar diferentes padrões para vários erros e fontes.
fonte
Aqui está como você pode desligar as informações extras que o rlog fornece (como nome do arquivo, número da linha, etc.). Ao inicializar o rlog em sua
main()
função (ou qualquer outro lugar), você pode fazer o seguinte:rlog::RLogInit(argc, argv); rlog::StdioNode slog (2, rlog::StdioNode::OutputColor); slog.subscribeTo( RLOG_CHANNEL("error") );
O segundo argumento para
StdioNode
é para que os sinalizadores controlem a saída. Verifique a documentação rlog (pode ser gerada com Doxygen) para a lista completa de possíveis sinalizadores. Aquele no exemplo aqui faz com que o rlog apenas colore a saída de acordo com a gravidade, sem qualquer outra informação adicionada.fonte
Você pode querer considerar o sistema de logog. logog oferece exatamente esse tipo de funcionalidade, mas não tem as dependências de código implícitas que o Pantheios possui. logog é thread-safe e permite um alto grau de controle sobre quais tipos de mensagens são registradas em qualquer ponto.
Sou o autor e mantenedor do logog, então minha opinião é um pouco tendenciosa. Mas eu revisei rlog, Pantheios e outros sistemas de registro antes de implementar este.
https://github.com/johnwbyrd/logog .
fonte
Algumas das sobrecargas podem acontecer em suas macros / fluxos. Você precisa ter muito cuidado para não compor a string sendo registrada quando o registro está desabilitado.
O uso inteligente de fluxos e do operador?: Permite que você faça isso, assim como as macros.
fonte
Poco tem um bom suporte de registro ...
http://pocoproject.org/slides/110-Logging.pdf
fonte
talvez pantheios,
embora eu não saiba se é seguro para fios ou não ...
fonte
experimente a lib c-log, https://github.com/0xmalloc/c-log , uma biblioteca de log rápida, estável e thread-safe para a linguagem C / C ++.
fonte
#include <pthread.h>
...)