장치에 데이터 로깅 및 로그 검색


82

Xcode의 디버그 빌드에서 시뮬레이터 또는 실제 장치를 사용하는지 여부에 관계없이 NSLog, printf, fprintf assert 및 NSAssert 문이 콘솔에 표시됩니다.

이제 장치에서 릴리스 빌드를 실행하면 (예 : 테스트 플라이트 빌드를 보내고 내 iPhone에 크게 올리면 릴리스 빌드가됩니다.)이 중 어떤 것이 (있는 경우) 기록되고 있습니까?

그리고 어떻게 로그를 검색합니까?

NSLog는 실제로 릴리스 빌드에서 무언가를 출력합니까? 결정 요인은 무엇입니까? stdout 또는 stderr에 쓰고 있습니까? 장치 로그에 stderr 만 기록됩니까? 이것은 내가 fprintf를 사용해야 함을 의미합니까? 장치 로그에 기록 된 것이 있습니까? 그런 것조차 있습니까? 그렇다면 어떻게 픽업합니까?

누군가 상황을 명확히 할 수 있습니까?


1
: 단지 파일 사용으로이 출력을 저장 stackoverflow.com/questions/28114110/...
키란 P 나이 르

답변:


94
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName =[NSString stringWithFormat:@"%@.log",[NSDate date]];
NSString *logFilePath = [documentsDirectory stringByAppendingPathComponent:fileName];
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);

application:didFinishLaunchingWithOptions앱 델리게이트 파일의 메서드 에이 코드 블록을 추가하기 만하면 모든 콘솔 로그 이벤트를 기록하는 iPhone의 앱 문서 디렉토리에 로그 파일이 생성됩니다. 모든 콘솔 이벤트를 보려면 iTunes에서이 파일을 가져와야합니다.

참고 : .plist 파일에 파일 Application supports iTunes file sharing이 있고 YESiTunes를 통해 액세스 할 수 있도록 설정되어 있는지 확인하십시오 .

로그 파일을 얻으려면 : iTunes를 실행하고 장치가 연결된 후 앱을 선택하고 앱을 선택합니다. Augument Document에서 파일을 가져옵니다. 그런 다음 디스크에 저장할 수 있습니다.


1
어떻게 작동합니까? 그냥 가지고.log 문서 디렉토리에 파일을 아이폰 OS는 콘솔 출력이 기록?
Ali는

2
디스크 메모리 누수를 방지하기 위해 날짜 순서별로 프로그래밍 방식으로 로그 파일을 삭제하는 방법은 무엇입니까?
hkaraoglu

4
NSDocumentDirectory이 로그 파일에 적합한 지 확실하지 않습니다. 일반적으로 사용자가 직접 생성 한 콘텐츠를위한 것이지만 로그 파일은 앱 지원 콘텐츠이므로 NSLibraryDirectory/ Logs 하위 디렉터리에있을 수 있습니다.
JustAMartin

Windows PC에서 로그 정보를 내보내려면 어떻게해야합니까?
Vineesh TP

1
@Ali stderr (표준 오류 출력) 파일 설명자 (즉, 파일 설명자 2)를 쓰기 위해 열린 파일에 연결하여 작동합니다. 따라서 stderr로 인쇄 할 때마다 대신 파일로 인쇄합니다. 그런 식으로 애플리케이션의 stderr 출력을 포착합니다. 로그 시스템은 그것에 대해 아무것도 모릅니다.
탄약 Goettsch

140

Xcode 6.1.1에서는 다음을 수행하여 NSLog 출력을 볼 수 있습니다. 그러나 너무 오래 전의 로그를 볼 수 있는지 확실하지 않습니다. 나는 그것이 몇 시간까지 되돌아가는 것을 보았다.

어쨌든 다음 단계는 다음과 같습니다.

  1. Xcode에서 창-> 장치로 이동하십시오.
  2. 왼쪽 패널에서 장치를 선택하십시오.
  3. 아래 스크린 샷과 같이 작은 화살표를 클릭합니다.

여기에 이미지 설명 입력


3
정답이되어야합니다. 로그 버튼을 찾기 위해 30 분을 보냈습니다. 덕분에 내 시간을 절약 ...
PrimaryChicken

1
그냥 NSLog. 거기에 cout 또는 printf를 기대하지 마십시오.
Kiran

10
이 기술을 사용하여 프로덕션 / 제출 된 앱에서 로그를 가져올 수 없습니다. 디버깅 중에 만 유용합니다.
Satyam

7
당신은 어쩌면 그들이 읽어야합니다, 내 하루 UI를 설계하는 방법을 NOT 완벽한 예를했다 developer.apple.com/library/mac/documentation/UserExperience/...
Hofi

1
방금 내 베이컨을 구 했어요. 릴리스 버전에서만 나타나는 버그를 쫓아 온 로그에서 문제가 밝혀졌습니다. 같은 대화 상자를보고 "실시간 장치 로그 표시"에 대한 보편적 인 기호 인 작은 화살표를 클릭 할 생각은 없었습니다. 감사합니다!
chacmool 2015-07-26

23

Swift 3.0에서는 Shyl의 코드가 다음과 같이 변경됩니다.

var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]
let fileName = "\(Date()).log"
let logFilePath = (documentsDirectory as NSString).appendingPathComponent(fileName)
freopen(logFilePath.cString(using: String.Encoding.ascii)!, "a+", stderr)

다른 모든 과정은 Shyl이 설명하는 것과 동일합니다.

앱 델리게이트 파일의 application : didFinishLaunchingWithOptions 메소드에이 코드 블록을 추가하면 모든 콘솔 로그 이벤트를 기록하는 iPhone의 앱 문서 디렉토리에 로그 파일이 생성됩니다. 모든 콘솔 이벤트를 보려면 iTunes에서이 파일을 가져와야합니다.

참고 : .plist 파일에서 파일이 Application supports iTunes file sharing존재하고 YESiTunes를 통해 액세스 할 수 있도록 설정되어 있는지 확인하십시오 .

로그 파일을 얻으려면 : iTunes를 시작하고, 장치가 연결된 후 앱을 선택하고 앱을 선택합니다. Augument Document에서 파일을 가져옵니다. 그런 다음 디스크에 저장할 수 있습니다.


내가 틀렸다면 정정하십시오 : 이것은 원래로 쓰여진 것을 의미하는 로그의 디렉토리를 변경 합니다 /var/db/diagnostics/. 를 참조하십시오 여기 .
Honey

@Honey,이 로그는 앱 문서 디렉토리에 저장됩니다.
Kiran P Nair

이 코드는 앱이 시작될 때 항상 새 파일을 생성합니다.
DURGESH 2017

Watch Extension 내에서 로그가 실행될 때 작동하도록하는 방법에 대한 아이디어가 있습니까?
user2623825

1
@KiranPNair-print () 문에 대해서도이 작업을 수행 할 수 있습니까? 아니면 NSLog 만 수행 할 수 있습니까?
Fra

12

NSLog는 프로덕션 릴리스에서 장치 로그에 기록되며 iPhone을 시스템에 연결하고 Organizer를 사용하여이를 확인할 수 있습니다. Organizer에서 iPhone을 선택하고 Device Logs를 클릭합니다. 로그에서 모든 NSLog 출력을 볼 수 있습니다.


4
업데이트 : Xcode 6에서는 더 이상 장치 로그를 통해 NSLog 출력을 읽을 수 없습니다. 창> 구성 도우미가 더 이상 장치를 나열하지 않습니다. 대신 창> 장치는 장치를 나열하지만 충돌 로그 만 표시합니다.
Robert

1
Robert, Xcode 6의 Window> Devices 화면에서 화면 하단 가장자리 근처에 보이지 않는 선이 있습니다. 풀면 선택한 장치의 콘솔 로그가 표시됩니다. Xcode의 UI 버그로 인해 보이지 않습니다.
oradyvan 2014


2

예, NSLog는 장치에서 출력합니다. Mac에 연결된 장치와 Xcode Organizer 도구를 사용하여 출력을 볼 수 있습니다.


사용자가 iTunes를 통해 이러한 로그를 검사 할 수 있습니까?
P i

3
이 답변은 stackoverflow.com/questions/2334664/… iPhone 구성 유틸리티가 장치에서 콘솔 로그를 내보낼 수 있음을 나타
Denis


2

이것이 오래된 스레드라는 것을 알고 있지만 다음과 같은 장치 로그에 액세스 할 수도 있습니다.

설정-> 개인 정보-> 분석-> 데이터

이 도움을 바랍니다

문안 인사


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.