2013-10-09 1 views
6

iOS 앱의 일정을 원격 서버에 기록하고 싶습니다.오프라인 로그에서 폴백 (fallback)하여 원격 서버에 iOS 앱 로깅을 구현하는 방법은 무엇입니까?

서버에서 장치에 연결할 수있을 때 서버에 API 호출을하고 있습니다. 기기가 오프라인 일 때 로그를 텍스트 파일에 추가하려고합니다.

매번 실행할 때마다 서버의 접근 가능성을 검사 할 계획이며 도달 가능한 경우 배경 파일이 회전되고 POST 요청을 사용하여 이전 로그 파일을 서버에 업로드하고 이전 로그를 삭제합니다 장치에서 파일. 이것은 좋은 일입니까?

그러나 연결 가용성 사이에 긴 간격이 있으면 이론적으로 오프라인 로그 파일이 실제로 커지고 업로드하기 어려워 질 수 있습니다.

로그가 온라인 및 오프라인 모드에서 궁극적으로 원격 서버에 도달하도록하는 다른 방법은 무엇입니까?

답변

0

"이게 좋은 일입니까?" 대답은 주로 앱이 무엇인지, 데이터를 어떻게 사용할 것인지에 달려 있습니다. 따라서 누군가가 여러분에게 답변 할 수 있는지 확신 할 수 없습니다 ... 기기에서 오래된 로그를 삭제 하시겠습니까? 나중에 제안하는 것만 큼 큰 규모가 될 것이라면 좋은 생각 인 것 같습니다. 그러나 사용자의 개인 정보를 염두에 두라고 조언합니다. 당신이 그들에 관해 수집하는 데이터에 대해 통보를받을 것입니까? 옵트 아웃 옵션을 제공합니까?

시나리오에 대한 대안이 있습니까? 아니요. 결국 서버에 데이터를 보내려하고 인터넷에 연결되어 있지 않다면 로컬 어딘가에 저장해야합니다. 어떻게 다른 옵션이있을 수 있습니까? 아니요, 다른 옵션은 없습니다. 큰 로그는 큰 메모리를 차지합니다.

0

NSLogger을 살펴보세요. 이것은 도움이 될 수 있습니다.

0

오프라인 로그를 하루 단위로 파일에 저장하면 매일 자신의 파일을 가져옵니다. 이렇게하면 청크로 보내고 마침내 연결되어 서버에 제출할 때 거대한 로그 파일의 내용을 메모리에 읽지 않아도됩니다.

1

저는 방금 자체 솔루션을 만들었습니다 : https://github.com/kennethjiang/Teleport-NSLog. 필요한 기능에 대해 "SimpleHTTPForwarder"를 살펴보십시오.

짧은 이야기지만, 나는 심지어 도달 가능성을 확인하지 않습니다. 전달자는 주기적으로 깨어나 로그를 백엔드로 보내려고 시도합니다. 성공하면 로컬 로그 파일을 제거합니다. 그렇지 않으면 연결 시간 초과와 같은 어떤 이유로 든 실패하면이 순서를 건너 뛰고 다음 번 대기합니다.

전달자는 항상 직렬 대기열에서 실행되기 때문에 동시성/경쟁 조건 문제가 없습니다. 코드는 간단하고 깨끗합니다!

2

Bugfender을 살펴볼 수 있습니다.이 문제를 해결하기 위해 Google에서 제작 한 제품입니다.

통합하기 쉽고 로그를 가져올 장치를 선택할 수 있습니다. 우리의 서비스는 오프라인과 온라인으로 작동하며, 우리는 믿을 수 있고 사용하기 쉽도록 많은 시간을 보냈습니다.

관련 문제