¿Qué instalaciones de registro utiliza con Qt?Instalaciones de registro y Qt
¿Elige métodos qDebug(), qAdvertencia(), qCritical(), qFatal(), o tal vez algo así como Log4cpp (Log4cplus etc.), o tal vez algún código personalizado?
¿Qué instalaciones de registro utiliza con Qt?Instalaciones de registro y Qt
¿Elige métodos qDebug(), qAdvertencia(), qCritical(), qFatal(), o tal vez algo así como Log4cpp (Log4cplus etc.), o tal vez algún código personalizado?
Las bibliotecas de registro de C++ existentes son demasiado pesadas para mi gusto, por lo que he creado un front-end personalizado basado en las ideas de Logging in C++ para el back-end de Qt qInstallMsgHandlerq. Es multiplataforma y seguro para subprocesos. Algún día limpiaré el código y lo lanzaré al mundo :)
Una alternativa interesante para Qt es QxtLogger.
No estoy usando Qt, pero para el registro estoy usando una versión modificada de Dr'Dobb's Logging in C++. El código original se puede encontrar here.
Mis modificaciones son específicas de la plataforma Microsoft Windows (fopen no permite el uso compartido de lectura de archivos) y se pueden encontrar here.
En Qt varias clases tienen instalaciones de serialización legibles por humanos bastante cómodas, que deberían ser llamadas por una buena biblioteca de registro de Qt implícitamente. Un marco general de registro de C++ no es suficiente aquí. –
Depende de cómo quiera utilizar esos datos de registro.
Si se utiliza para la depuración en tiempo de ejecución, qWarning() haría bien.
Si necesita depurar retrospectivamente (normalmente el código del lado del servidor), los archivos de texto simple son los mejores. Lo mejor es organizar estos archivos de registro por diario.
Log4Qt es un puerto del famoso log4j para el mundo de Qt.
QDebug es la mejor manera de hacerlo, ya que presenta una integración lista para usar con el resto del framework, no lo hace dependiente del código de un tercero y cubre todas las necesidades de registro.
Pero no se registra en los archivos ni en el registro de eventos del sistema. – philk
No hace eso por defecto, pero eso no es un buen valor predeterminado para mí. Si desea volver a enrutar qDebug, consulte esta publicación http://stackoverflow.com/questions/4954140/how-to-redirect-qdebug-qwarning-qcritical-etc-output –
Sé que puede redirigir qDebug. Todavía no es lo suficientemente flexible para una aplicación madura. – philk
Si solo está trabajando en un solo subproceso, qDebug y dicho trabajo funcionan bastante bien, o puede modificarlos un poco instalando su propio controlador con qInstallMessageHandler en QT 5.0+, o qInstallMsgHandler en versiones anteriores.
Nota: Las versiones anteriores de qDebug() etc., donde utilizaba qInstallMsgHandler (ahora obsoleto, por ejemplo, http://doc.qt.io/archives/4.6/qtglobal.html#qDebug) no eran seguros para subprocesos. Si usas hilos, se romperían/romperían mal. Internamente estaba usando QTextStream, que fue reentrante, pero no seguro para subprocesos.
+1 Gracias por la advertencia de seguridad de subprocesos qDebug –
-1 'qDebug()' es seguro para subprocesos. La seguridad de subprocesos de 'QTextStream' es irrelevante porque no hay' QTextStream' compartido. Cada invocación de 'qDebug()' obtiene su propio 'QTextStream'. – Oktalist
@Oktalist: No estoy de acuerdo con usted: http://stackoverflow.com/a/23517726/1202500 - y la (s) respuesta (s) es/son exactamente mi experiencia ... – mozzbozz
En cuanto a la respuesta que dice "Desafortunadamente qDebug() etc. no son seguros para subprocesos. Si usa subprocesos, se bloquean/rompen mal. Internamente usa QTextStream, que es reentrante, pero no seguro para subprocesos".
Tengo serias dudas de que qDebug esté diseñado para ser utilizado simultáneamente. Archive un error si eso no es verdad.
La fuente parece ser http://www.qtcentre.org/threads/28879-redirecting-qDebug-to-file-threading-question –
Lo dudo o no, no importa. En 2011, al menos en una plataforma, el uso de múltiples hilos se bloqueó. Si no está documentado como seguro para subprocesos, se debe suponer que no es seguro para subprocesos, porque la implementación está sujeta a cambios, lo que significa que no es un error si no funciona. Si desea asegurarse de que la implementación no cambie, entonces debe copiar la funcionalidad, lo que significa que efectivamente está escribiendo su propia versión de todos modos (solo con una ventaja). Si el doctor dice que es seguro para subprocesos a partir de una versión en particular, entonces puede usarlo. – DarrylC
Ahora documentado que es seguro para subprocesos: https://doc.qt.io/qt-5/qtglobal.html#qDebug – kkoehne
Dado que Qt 5.2 admite el registro categorizado: http://qt-project.org/doc/qt-5/qloggingcategory.html. Esto le permite dividir sus mensajes de registro en una (jerarquía de) categorías, y ajustar qué se registra y qué no.
Quizás QxtLogger sea la mejor solución para proyectos basados en Qt. Único inconveniente (en mi opinión), que este registrador es parte de una gran biblioteca. De todos modos, gracias por su consejo. – cybevnm
@vnm: publiqué mi biblioteca de registro en http://bitbucket.org/razvanpetru/qt-components/downloads/ – rpg
Ok.Le daré un vistazo. Gracias – cybevnm