오류 관리

초기 디자인, 테스트, 배포 중에 앱이 정상적으로 작동하지 않는 경우가 있습니다. 이러한 경우에는 오류를 나타내고 진단하는 방식을 구현하면 유용할 수 있습니다.

콘솔 로그

앱이 예상치 못한 방식이나 이해할 수 없는 방식으로 작동할 때는 콘솔을 참조해 앱 내부에서 수행되는 작업을 관찰하면 도움이 될 수 있습니다. AppStudio에는 빌트인 콘솔(자세한 내용은 콘솔 결과 캡처 참고)이 포함되어 있으며, 앱이 해당 콘솔 내에서 실행되면 Qt Creator에 콘솔 메시지가 나타납니다. 코드의 라인을 통해 추가 콘솔 정보를 제공하면 유용할 수 있는 속성을 제공하거나, 올바르게 작동하지 않을 수도 있는 결과가 복잡한 함수 관련 지침으로 활용할 수 있습니다.

다음 코드 샘플은 파일 경로를 변경할 때 새 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일 수도 있습니다. 대상이 파일 경로이면 앱이 로그 파일을 생성하여 해당 파일에 결과를 출력하고, URL이면 앱이 해당 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();
    }
}