QT では、 qDebug.h
のいくつかの関数を使用できます qDebug()
のようなヘッダー と qWarning()
情報をコンソールに記録します。 QML では console.log()
などを使用できます 、 console.error()
.独自のロガーを実装するのも非常に簡単です (例:SyslogMessageHandler
) syslog やコンソールへのロギングなど、別の方法が必要な場合。この投稿では、リリース ビルドで両方の形式のロギングを無効にする方法を紹介します。qml と qt では、出力を管理する方法が異なります。
QT_NO_DEBUG_OUTPUT
を定義するために主に提案されたオンライン情報 、しかしそれはQMLロギングを無効にできませんでした。私のサンプルプロジェクトに独自の MessageHandler
があったためかどうかはわかりません 、しかし、最終的にすべてを無効にする方法を見つけました。
デバッグと qml ロギングに関する QT のドキュメント ページは役に立ちますが、多くの場合、それらのドキュメントと同様に非常に包括的であるため、特定の 1 つのことを行う方法を見つけるのは簡単ではありません。この場合、リリース ビルドでロギングを無効にするだけです。 /P>
QT ログを無効にする
.pro
で ファイルに次の行を追加します:
# Suppress logging output for release build.
CONFIG(release, debug|release): DEFINES += QT_NO_DEBUG_OUTPUT
CONFIG(release, debug|release): DEFINES += QT_NO_INFO_OUTPUT
CONFIG(release, debug|release): DEFINES += QT_NO_WARNING_OUTPUT
各フラグは、適切な qLog()
を無効にします メソッド、たとえば QT_NO_DEBUG_OUTPUT
qDebug()
を無効にします .
.pro
を編集した後 ファイルを削除したら、忘れずにプロジェクトを消去して再構築してください。
なぜ CONFIG(release):
だけではないのか ?複数のオプションがある場合、これは最後のオプションが release
の場合にのみトリガーされます .
CONFIG(release, debug|release)
true
に評価されます CONFIG
の場合 release
を含む debug
ではありません 、または debug
の両方が含まれている場合 と release
しかし debug
release
が最後に出現した後は表示されません .例:
CONFIG += release debug release
最後の debug
最後の debug
の後に来る 、 CONFIG(release, debug|release)
true
です .
QML ロギングを無効にする
main.cpp
で QLoggingCategory
を含める ヘッダー:
#include <QLoggingCategory>
他のロギング ハンドラの前 (qInstallMessageHandler()
など) )、次のコードを追加します:
#ifdef QT_NO_DEBUG
QLoggingCategory::setFilterRules("*.debug=false\n"
"*.info=false\n"
"*.warning=false\n"
"*.critical=true");
fprintf(stderr, "Disabling QML logging in release build.\n");
#else
fprintf(stderr, "QML logging enabled.\n");
#endif
QT_NO_DEBUG
リリース ビルドのコンパイル時に QT によって自動的にエクスポートされます。フィルター ルールを使用すると、いつ、どこでログに記録するかをより詳細に制御できますが、このコードは重要なもの以外をすべて無効にするだけです。改行で区切る必要があります (\n
メソッド パラメーター内)、カンマは機能しません。
fprintf
行は省略可能ですが、何が起こっているのか、いつログが記録されているのか、いつログが無効になっているのかを知るのに役立ちます.
#if defined(QT_NO_DEBUG_OUTPUT)
を使ってみた より詳細な制御を確認しますが、機能しませんでした。すべてのコンパイル (デバッグまたはリリース) でロギングが無効になりましたが、その理由は不明であり、あまり掘り下げませんでした。
もう 1 つの方法は、環境変数を使用することです。ここで彼らは次のフラグを提案します:
QT_LOGGING_RULES=qml=false
これは私にとってはうまくいきませんでした。コマンドラインまたは main.cpp
でエクスポートされました 以下のように:
#ifdef QT_NO_DEBUG
qputenv("QT_LOGGING_RULES", "qml=false");
#endif
あなたのマイレージは異なる場合があります。うまくいく場合は、お知らせください。