アプリが初期設計、テスト、配置中に期待どおりに機能しない場合があります。この場合、エラーを表示および診断する方法を実装しておくと役に立つ場合があります。
コンソール ログ
アプリが想定しない動作や理解できない動作をする場合、コンソールを参照して、アプリ内部の動作を観察すると役に立つ場合があります。AppStudio には、組み込みコンソール (詳細については「コンソール出力の取得」を参照) が含まれており、Qt Creator の中でアプリを実行すると、コンソール メッセージが表示されます。追加のコンソール情報は、役に立つ可能性があるプロパティを提供するために、または正しく動作しない可能性がある複雑な出力を伴う関数の標識として、1 行のコードで提供できます。
次のサンプル コードは、新しい filepath を変更時に表示する行をコンソール ログに出力します。
TextField {
Layout.fillWidth: true
text: fileFolder.path
onEditingFinished: {
fileFolder.path = text.trim();
console.log("New filepath:", fileFolder.path);
}
}
ライブ出力やログ ファイルによる、より複雑なコンソールのサポートのために、AppStudio AppFramework は、コンソール ログを支援および構成するための一連の関数を備えた Logging コンポーネントを提供しています。
コンソール ログを開始するには、Logging コンポーネントの enabled プロパティを true に設定します。これは、バックグラウンドで設定してセッション全体を記録したり、スイッチまたはボタンで設定して、要求したときのみログ機能を開始したりできます。ログを開始すると、outputLocation プロパティが参照され、出力する場所と形式が決定されます。この出力先は、ファイル パス (アプリがログ ファイルを作成および出力します)、または syslog コンソールの URL (アプリが直接出力します) のいずれかに設定できます。ログ メッセージの書式設定は、messagePattern プロパティで構成できます。
messagePattern プロパティは、一連のプレースホルダーを使用して情報を構築します。コンソール メッセージに必要な情報を表示するには、次のプレースホルダーを含めます。
プレースホルダー | 説明 |
---|---|
%{appname} | QCoreApplication::applicationName>() |
%{category} | ログのカテゴリ |
%{file} | ソース ファイルのパス |
%{function} | 機能 |
%{line} | ソース ファイルの行 |
%{message} | 実際のメッセージ |
%{pid} | QCoreApplication::applicationPid() |
%{threadid} | 現在のスレッドのシステム全体での ID (取得可能な場合) |
%{qthreadptr} | 現在の QThread へのポインター (QThread::currentThread() の結果) |
%{type} | "debug"、"warning"、"critical"、"fatal" |
%{time process} | プロセス開始後のメッセージの時間 (秒) |
%{time boot} | システム ブート後のメッセージの時間 (秒) (判定可能な場合) |
%{time [format]} | メッセージ発生時のシステム時間。書式は QDateTime::toString() に渡して設定されます。 |
エラー メッセージの追加
予測や認識は可能でも解決できないエラーもあります。これは、アプリの不可避の制限による場合があります。たとえば、オンライン サービスに常にアクセスする必要があるアプリは、インターネットにアクセスできない環境では動作しません。これは、多くのコンポーネントで提供される onError 信号が発信されたときにメッセージを表示することで対処できます。これらの中には、NetworkRequest の errorText プロパティのように、エラー発生時にユーザーに通知する他のプロパティを提供するコンポーネントもあります。
次のサンプル コードは、NetworkRequest が失敗したときのエラー メッセージの表示方法を示しています。エラー メッセージには、返されたエラーが表示されます。また、不可能な要求を作成するように指示することで、ネットワーク リクエストが失敗するようにも設定しています。
MessageDialog {
id: messageDialog
title: "Network error"
text: "Error code: " + networkRequest.errorCode + "\n" + networkRequest.errorText
}
NetworkRequest {
id: networkRequest
url: "http://appstudio.arcgis.com/images/index/introview.jpg2"
responseType: "json"
onError: {
messageDialog.open();
}
}
Button {
id: sendBtn
text: "Send Request"
onClicked: {
networkRequest.send();
}
}