Estoy trabajando en una aplicación multiproceso crítica para el rendimiento. Miré el registro de rlog, Ace y Boost. Elegí rlog porque leí que era el más rápido (cuando el registro está deshabilitado, tiene la menor sobrecarga).
El problema que tengo es que muestra el nombre del archivo, el número de línea, etc. incluso en el modo de lanzamiento. Si me puede decir cómo apagar esa información, mi problema podría resolverse. En cualquier caso, ¿cuál es el registrador en C ++ más eficiente para mi situación?
Respuestas:
Lamentablemente, no puedo votar en contra en este momento. Por lo que puedo decir, nunca uses basura como Apache log4cxx. Contiene errores graves.
En mi opinión, deberías ir con impulso.
fuente
Se cree que Pantheios es la biblioteca de registro de C ++ con mejor rendimiento , además de afirmar que es la única que es 100% segura de tipos (consulte este artículo sobre una biblioteca relacionada que explica por qué las bibliotecas basadas en printf () / iostream no son tipográficas seguro)
fuente
Tuve éxito con log4cxx en http://logging.apache.org/log4cxx/index.html . Es una versión C ++ del popular registrador Log4j, es fácil de configurar a través de un archivo conf o en el código. La sobrecarga cuando está deshabilitada es mínima (llamada de método y comparación de enteros).
El patrón para la salida al registro se define mediante un patrón de conversión que puede ser tan simple como la fecha / hora y un mensaje. También maneja la limitación del tamaño del archivo, la sustitución, etc. También puede configurar diferentes patrones para varios errores y fuentes.
fuente
Así es como puede apagar la información adicional que proporciona rlog (como nombre de archivo, número de línea, etc.). Cuando inicializa rlog en su
main()
función (o donde sea), puede hacer lo siguiente:rlog::RLogInit(argc, argv); rlog::StdioNode slog (2, rlog::StdioNode::OutputColor); slog.subscribeTo( RLOG_CHANNEL("error") );
El segundo argumento de
StdioNode
es que las banderas controlen la salida. Consulte la documentación de rlog (se puede generar con Doxygen) para ver la lista completa de posibles banderas. El del ejemplo aquí hace que rlog solo coloree la salida de acuerdo con la gravedad, sin agregar ninguna otra información.fuente
Es posible que desee considerar el sistema logog. logog ofrece exactamente este tipo de funcionalidad, pero no tiene las dependencias de código implícitas que Pantheios tiene. logog es seguro para subprocesos y permite un alto grado de control sobre qué tipos de mensajes se registran en cualquier momento.
Soy el autor y mantenedor de logog, por lo que mi opinión es un poco sesgada. Pero revisé rlog, Pantheios y otros sistemas de registro antes de implementar este.
https://github.com/johnwbyrd/logog .
fuente
Algunos de los gastos generales pueden ocurrir en sus macros / streams. Debe tener mucho cuidado de no componer la cadena que se registra cuando el registro está deshabilitado.
El uso inteligente de los flujos y el operador?: Le permite hacer eso, al igual que las macros.
fuente
Poco tiene un buen soporte de registro ...
http://pocoproject.org/slides/110-Logging.pdf
fuente
tal vez pantheios,
aunque no sé si es seguro para subprocesos o no ...
fuente
pruebe la biblioteca c-log, https://github.com/0xmalloc/c-log , una biblioteca de registros rápida, estable y segura para subprocesos para lenguaje C / C ++.
fuente
#include <pthread.h>
...)