NSLog 로그 출력 불완전 문제 분석 및 솔루션

12994 단어 저널
NSLog에서 긴 문자열을 인쇄하면 로그가 완전히 인쇄되지 않고 뒷부분이 분실될 수 있습니다.처음에는 비동기와 일치하는 것으로 생각했을 때 비동기 로그 라인에 강제로 삽입되었는데, 결과적으로 한참을 찾았지만, 이것은 전혀 인쇄되지 않았다는 것을 설명한다.문제가 있는 로그 인쇄 코드: NSLog(@"3 :%@", data);, 이 코드를 어떻게 보든 아무런 문제가 없습니다. 인쇄 NSLog(@"data.length:%d", data.length);에서 나온 이 문자열의 길이는 비교적 깁니다: data.length:7353.나는 시스템의 이 인쇄 함수가 메모리 제한이 있다고 의심했다. 그것의 길이를 초과하면 바로 뒤의 문자를 잘라 버렸다.최대 길이의 문자열을 지원할 수 있는지 분석합니다. [ { "openType" : "03", "openTime" : "1564651163", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651170", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651176", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651182", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651188", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651194", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651200", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651206", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651212", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651218", "uid" : "3130303030393539" }, { "openType" : "03", "ope 실제 빈칸 한자를 포함하는 문자는 1021개입니다.설마 그것은 정말 이 정도의 문자열만 인쇄할 수 있는 것입니까?이 문자열을 직접 인쇄합니다: NSLog(@"%@", data);.그 결과 이 7353개의 문자를 직접 인쇄해 냈다.이 1021개의 한자와 문자만 인쇄하는 것이 아니라 많이 인쇄할 수 있을 것 같다.조립과 동시에 인쇄를 하기 때문에 이런 제한이 있는 것일까. 나는 이런 상황을 테스트했다. NSLog(@"testdata%@", data); 결과적으로 이 7353개의 문자를 모두 인쇄할 수 있었다.추측이 완전히 옳지 않다는 것을 알 수 있다.그런 다음 문자열을 외부에서 결합하여 직접 인쇄해 보겠습니다.
                str = [NSString stringWithFormat:@" %@", data];
                NSLog(@"%@", str);

결과와 안 됨도 이 7353개의 문자를 모두 인쇄해라.추측이 완전히 옳지 않다는 것을 알 수 있다.그들에 비해 규칙을 발견했다. 인쇄는 연결 문자열이고 그 안의 상수 문자열에 중국어가 있어야 인쇄된 문자열이 매우 짧고 가장 큰 길이를 초과한 문자열 뒷부분은 버려진다.그렇다면 찾은 문제점은 이 최대 길이가 얼마나 되는지 연구해 볼까요?인쇄된 가장 큰 문자열은 최대 1021개의 문자로 한자를 포함하고 있으며 1021개의 문자와 관련이 있을 가능성이 높기 때문에 문자열을 캡처 테스트합니다.테스트 결과: 중국어 상수의 경우 1020 문자의 문자열과 연결하는 데 문제가 없지만 1021 문자의 문자열과 연결하면 마지막 문자가 출력되지 않습니다.총괄: 긴 문자열을 직접 인쇄할 때 슈퍼 길이가 아니면 보통 문제가 없다.출력 정보를 추가하고 중국어를 상수로 사용할 때 변수 문자열과 연결할 때, 그들의 문자 수와 1021을 초과할 때, 뒤의 문자열은 출력되지 않는다. (테스트의 장면은 중국어 문자와 비한자 json 문자열이 포함되지 않는다. 만약 중국어가 많으면, 그들의 총계가 1021인지 여부는 더 이상 연구하지 않았다.)NSLog을 효과적으로 재설정하는 방법을 개발할 수 있습니다. 이 시나리오는 기존 Mac의 콘솔 인쇄 함수가 아니라 LINux 운영체제 로그 함수로 원래의 함수를 바꾸었습니다.
#ifndef __OPTIMIZE__
    //      debug   ,    ,   
    #define NSLog(...) printf("%s %s  %d : %s
",__TIME__, __PRETTY_FUNCTION__ ,__LINE__, [[NSString stringWithFormat:__VA_ARGS__] UTF8String]); #else // release , #define NSLog(...) #endif

추천 솔루션: 인쇄할 모든 문자열을 하나의 문자열로 연결한 다음 한 번에 인쇄합니다.
해결 방안: 인쇄할 모든 문자열을 하나의 문자열로 연결한 다음 한 번에 인쇄합니다.NSLog 직접 재설정: #define NSLog(format, ...) printf("TIME:%s FILE:%s(%d ) FUNCTION:%s
%s

",__TIME__, [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, __PRETTY_FUNCTION__, [[NSString stringWithFormat:(format), ##__VA_ARGS__] UTF8String])
권장하지 않습니다.테스트 코드:
                NSLog(@"data.length:%d", data.length);
                NSString *str = [NSString stringWithFormat:@"%@", [data substringToIndex:1022]];
                NSLog(@" %@", str);
                NSLog(@"str.length:%d", str.length);
                str = [NSString stringWithFormat:@"%@", [data substringToIndex:1021]];
                NSLog(@" %@", str);
                str = [NSString stringWithFormat:@" %@", [data substringToIndex:1021]];
                NSLog(@"%@", str);
                NSLog(@"str.length:%d", str.length);
                str = [NSString stringWithFormat:@"%@", [data substringToIndex:1020]];
                NSLog(@" %@", str);
                str = [NSString stringWithFormat:@" %@", [data substringToIndex:1020]];
                NSLog(@"%@", str);
                NSLog(@"str.length:%d", str.length);
//                str = [NSString stringWithFormat:@"3   :data:%@", data];
                NSLog(@"3   :%@", data);

인쇄된 로그는 다음과 같이 분석할 수 있습니다.
2019-08-02 16:11:54.297359+0800 ELock[1447:400407] data.length:7353
2019-08-02 16:11:54.297597+0800 ELock[1447:400407]  [	   {	     "openType" : "03",	     "openTime" : "1564651163",	     "uid" : "3130303030393539"   },	   {	     "openType" : "03",	     "openTime" : "1564651170",	     "uid" : "3130303030393539"   },	   {	     "openType" : "03",	     "openTime" : "1564651176",	     "uid" : "3130303030393539"   },	   {	     "openType" : "03",	     "openTime" : "1564651182",	     "uid" : "3130303030393539"   },	   {	     "openType" : "03",	     "openTime" : "1564651188",	     "uid" : "3130303030393539"   },	   {	     "openType" : "03",	     "openTime" : "1564651194",	     "uid" : "3130303030393539"   },	   {	     "openType" : "03",	     "openTime" : "1564651200",	     "uid" : "3130303030393539"   },	   {	     "openType" : "03",	     "openTime" : "1564651206",	     "uid" : "3130303030393539"   },	   {	     "openType" : "03",	     "openTime" : "1564651212",	     "uid" : "3130303030393539"   },	   {	     "openType" : "03",	     "openTime" : "1564651218",	     "uid" : "3130303030393539"   },	   {	     "openType" : "03",	     "ope
2019-08-02 16:11:54.461804+0800 ELock[1447:400407] str.length:1022
2019-08-02 16:11:54.461982+0800 ELock[1447:400407]  [	   {	     "openType" : "03",	     "openTime" : "1564651163",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651170",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651176",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651182",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651188",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651194",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651200",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651206",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651212",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651218",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "ope
2019-08-02 16:11:54.473584+0800 ELock[1447:400407]  [	   {	     "openType" : "03",	     "openTime" : "1564651163",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651170",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651176",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651182",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651188",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651194",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651200",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651206",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651212",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651218",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "open
2019-08-02 16:11:54.475564+0800 ELock[1447:400407] str.length:1022
2019-08-02 16:11:54.475860+0800 ELock[1447:400407]  [	   {	     "openType" : "03",	     "openTime" : "1564651163",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651170",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651176",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651182",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651188",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651194",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651200",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651206",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651212",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651218",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "ope
2019-08-02 16:11:54.477939+0800 ELock[1447:400407]  [	   {	     "openType" : "03",	     "openTime" : "1564651163",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651170",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651176",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651182",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651188",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651194",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651200",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651206",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651212",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "openTime" : "1564651218",	     "uid" : "3420303038763539"   },	   {	     "openType" : "03",	     "ope
2019-08-02 16:11:54.480312+0800 ELock[1447:400407] str.length:1021

좋은 웹페이지 즐겨찾기