Подтвердить что ты не робот

Лесозаготовительные сооружения и Qt

Какие средства ведения журнала вы используете с Qt?

Вы выбираете методы qDebug(), qWarning(), qCritical(), qFatal() или, может быть, что-то вроде Log4cpp (Log4cplus и т.д.) или, может быть, какой-то пользовательский код?

4b9b3361

Ответ 1

Существующие библиотеки протоколов С++ слишком тяжелы для моих вкусов, поэтому я создал пользовательский интерфейс на основе идей Вход в С++ для Qt qInstallMsgHandlerq back-end. Это кросс-платформенный и поточно-безопасный. Когда-нибудь я очищу код и отпустите его в мир:)

Интересной альтернативой для Qt является QxtLogger.

Ответ 2

Если вы просто работаете в одном потоке, qDebug и такая работа очень хорошо, или вы можете немного изменить их, установив собственный обработчик с qInstallMessageHandler в QT 5.0+ или qInstallMsgHandler в старых версиях.

Примечание. Предыдущие версии qDebug() и т.д., в которых вы использовали qInstallMsgHandler (теперь устарели, например http://doc.qt.io/archives/4.6/qtglobal.html#qDebug), не были потоками -безопасно. Если вы используете потоки, они будут сильно разбиваться/ломаться. Внутри он использовал QTextStream, который был реентерабельным, но не потокобезопасным.

Ответ 3

Так как Qt 5.2 поддерживает категоризированное ведение журнала: http://qt-project.org/doc/qt-5/qloggingcategory.html. Это позволяет разделить ваши протоколирующие сообщения на категории (иерархию) и точную настройку, которая регистрируется, а что нет.

Ответ 4

Log4Qt - это порт известного log4j для мира Qt.

Ответ 5

Я не использую Qt, но для ведения журнала я использую модифицированную версию Dr'Dobb Вход в С++. Исходный код можно найти здесь.

Мои изменения относятся только к платформе Microsoft Windows (fopen не разрешает совместное использование файлов) и можно найти здесь.

Ответ 6

QDebug - лучший способ пойти, поскольку он представляет собой интеграцию с остальной частью фреймворка, не заставляет вас зависеть от стороннего кода и охватывает практически все потребности ведения журнала.

Ответ 7

Относительно ответа, говорящего "К сожалению, qDebug() и т.д. не являются потокобезопасными. Если вы используете потоки, они будут сильно разбиваться/ломаться. Внутри он использует QTextStream, который является реентерабельным, но не потокобезопасным".

Я серьезно сомневаюсь, что qDebug предназначен для одновременного использования. Создайте ошибку, если это неверно.

Ответ 8

Зависит от того, как вы хотите использовать данные журнала.

Если он используется для отладки во время выполнения, qWarning() будет отлично работать.

Если вам нужно отлаживать ретроспективный (обычно серверный код), то старые текстовые файлы являются лучшими. Лучше всего организовать эти лог файлы по дневному протоколу.