원하지 않는 이상한 Xcode 로그 숨기기
Xcode 8+를 사용하고 새 빈 프로젝트를 생성할 때 응용 프로그램을 실행할 때 다음 로그가 나타납니다.
2016-06-13 16:33:34.406093 TestiOS10[8209:100611] bundleid: com.appc.TestiOS10, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-06-13 16:33:34.406323 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.409564 TestiOS10[8209:100611] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.504117 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.548023 TestiOS10[8209:100607] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.568458 TestiOS10[8209:100608] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
누군가가 이미 이 문제를 처리할 구성을 찾은 것일 수도 있습니다.
사용해 보십시오.
1 - Xcode 메뉴에서 열기:Product
>Scheme
>Edit Scheme
2 - 환경 변수 세트OS_ACTIVITY_MODE
=disable
@rustysshelf의 원래 트윗과 iDevzilla의 답변을 바탕으로 장치에서 NSLog 출력을 비활성화하지 않고 시뮬레이터의 소음을 차단하는 솔루션이 있습니다.
- 제품 > 구성표 > 구성표 편집...> 실행(디버그), OS_ACTIVE_MODE 환경 변수를 ${DEBUG_ACTIVE_MODE}(으)로 설정하여 다음과 같이 표시합니다.
- 프로젝트 빌드 설정으로 이동한 후 +를 클릭하여 DEBUG_ACTIVE_MODE라는 사용자 정의 설정을 추가합니다. 이 설정을 확장하고 Debug 옆에 있는 +를 클릭하여 플랫폼별 값을 추가합니다.드롭다운을 선택하고 "Any iOS Simulator"로 변경합니다.그런 다음 값을 "사용 안 함"으로 설정하여 다음과 같이 표시합니다.
OS_ACTIVE_MODE가 작동하지 않았습니다(입력했기 때문일 수 있음).disable
~하듯이disabled
하지만 그게 더 자연스럽지 않나요?!?), 또는 적어도 많은 메시지를 막지는 못했습니다.자, 여기 환경 변수에 대한 진정한 해결책이 있습니다.
https://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
lldb_private::Error
PlatformDarwin::LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) {
// Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr
// if the OS_ACTIVITY_DT_MODE environment variable is set. (It doesn't
// require any specific value; rather, it just needs to exist).
// We will set it here as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag
// is not set. Xcode makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell
// LLDB *not* to muck with the OS_ACTIVITY_DT_MODE flag when they
// specifically want it unset.
const char *disable_env_var = "IDE_DISABLED_OS_ACTIVITY_DT_MODE";
auto &env_vars = launch_info.GetEnvironmentEntries();
if (!env_vars.ContainsEnvironmentVariable(disable_env_var)) {
// We want to make sure that OS_ACTIVITY_DT_MODE is set so that
// we get os_log and NSLog messages mirrored to the target process
// stderr.
if (!env_vars.ContainsEnvironmentVariable("OS_ACTIVITY_DT_MODE"))
env_vars.AppendArgument(llvm::StringRef("OS_ACTIVITY_DT_MODE=enable"));
}
// Let our parent class do the real launching.
return PlatformPOSIX::LaunchProcess(launch_info);
}
설정 ㅠㅠOS_ACTIVITY_DT_MODE
환경 변수에서 "아니오"(주요 답변의 구성표 스크린샷에 설명된 GUI 방법)를 사용하면 작동합니다.
NSLog
시스템 메시지, 오류 및 자신의 디버깅을 위한 덤핑 장소가 됩니다. https://github.com/fpillet/NSLogger 과 같은 실제 로깅 접근 방식이 아마 필요할 것입니다.
OR
새로운 쿨에이드를 마셔보세요: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ 전체 로깅 API를 점검한 후 약간의 문제가 있는 것은 놀라운 일이 아닙니다.
부록
어든쨌.NSLog
심일 뿐입니다.
https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/
NSLog / CFLog
NSLog는 이제 대부분의 상황에서 sim tos_log에 불과합니다.
이제 다른 환경 변수에 대한 소스를 인용하는 것이 합리적입니다.이번에는 애플 내부자들과 상당히 이질적인 장소입니다.그것들이 왜 겹치는지 잘 모르겠습니다.[오답]NSLog
[9월 22일 편집]:"release"와 "stream"은 "debug"와 무엇이 다른지 궁금합니다.소스가 부족합니다.
e = getenv("OS_ACTIVITY_MODE");
if (e) {
if (strcmp(e, "release") == 0) {
mode = voucher_activity_mode_release;
} else if (strcmp(e, "debug") == 0) {
mode = voucher_activity_mode_debug;
} else if (strcmp(e, "stream") == 0) {
mode = voucher_activity_mode_stream;
} else if (strcmp(e, "disable") == 0) {
mode = voucher_activity_mode_disable;
}
}
트윗에 답이 있었습니다 - https://twitter.com/rustyshelf/status/775505191160328194
Xcode 8 iOS Simulator가 비정상적으로 기록되는 것을 막으려면 디버깅 체계에서 환경 변수 OS_ACTIVE_MODE = disable을 설정합니다.
효과가 있었습니다.
아래 단계를 찾아주세요.
- 제품 => 구성표 => 구성표 편집을 선택하거나 바로 가기를 사용합니다.
CMD + <
- 다음을 선택합니다.
Run
왼쪽에서 옵션을 선택합니다. - 환경 변수 섹션에서 OS_ACTIVE_MODE 변수 = 사용 안 함
자세한 내용은 아래의 GIF 표현을 참조하십시오.
Xcode Version 8.0 베타 2(8S162m)에서는 아직 해결되지 않았으며 Xcode 콘솔에도 추가 로그가 나타납니다.
EDIT 8/1/16: 이 문제는 Xcode 8 베타 4(8S188o)에 대한 릴리스 노트에서 여전히 지속되는 문제로 인정되었습니다.
Xcode 8 베타 4 – IDE의 알려진 문제
디버깅
Xcode Debug Console은 Simulator에서 응용 프로그램을 디버깅할 때 시스템 프레임워크에서 추가 로깅을 표시합니다.(27331147, 26652255)
아마 GM 릴리즈를 통해 이 문제가 해결될 것입니다.그때까지 인내심과 이상적인 것은 아니지만 제가 사용하는 해결책은 아래와 같습니다.
이전 답변과 유사하게 다음과 같이 답변합니다.
인쇄 로그 앞에 특수 문자(예: * 또는 ^ 또는 ! 등)를 붙입니다.
그런 다음 콘솔 창의 오른쪽 아래에 있는 검색 상자를 사용하여 선택한 특수 문자를 입력하여 콘솔 로그를 필터링하여 콘솔이 원하는 대로 인쇄 로그를 표시하도록 합니다.
해결 방법은 중단점에서 디버거 명령 및/또는 로그 메시지를 사용하는 것입니다.
그리고 콘솔 출력을 All Output에서 Debugger Output으로 변경합니다.
네.이번 일로 한바탕 소동이 벌어지는 것 같으니, 그 계략을 쓰지 않고 버티는 방법을 여러분에게 주겠습니다.iOS 시뮬레이터를 구체적으로 다루겠지만, 다른 dir에 위치한 TV Sim에도 적용해야 할 수 있습니다.
이 모든 것을 일으키는 문제는 Xcode 디렉토리 내에 있는 plist입니다.SIM이 시작될 때 configd_sim이라는 프로세스가 시작되어 목록을 읽고 목록에 기록해야 한다고 지정된 경우 디버깅 정보를 출력합니다.
플리스터는 다음 위치에 있습니다.
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems
베타를 가지고 노는 경우에는 dir가 다르다는 점에 유의하십시오.
이 디렉터리에 수많은 목록이 표시됩니다.이제 애플리케이션을 빌드 및 실행하고 로그를 관찰합니다.하위 시스템: 부품에 이어 바로 컨텐츠를 찾습니다.이 바로 뒤에 나오는 이름은 해당 문제가 있는 plist를 나타냅니다.
여기서 목록을 수정하여 다음을 포함하는 사전인 디버깅 [Level] 키/값을 삭제합니다."Enable" => "Default"
키/값... 또는 합니다.또는 단순히 목록을 삭제합니다.Xcode 응용 프로그램에 위치하기 때문에 이러한 작업 중 하나를 수행하려면 루트가 필요합니다.
그자리의 plutil -p
할 수 . 명은당도움될이수있다습니도게신에.
plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.apple.BackBoardServices.fence.plist
이것은 저에게 다음을 포함하는 문제가 있는 목록 중 하나를 주었습니다.
{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}
행운을 빌어요 :]
이는 Xcode 8 베타 릴리스 노트에서 발견된 로깅과 관련된 알려진 문제와 관련이 있습니다(WWDC의 엔지니어에게도 문의).
Watch 시뮬레이터에서 Watch OS 애플리케이션을 디버깅할 때 OS가 과도한 양의 도움이 되지 않는 로깅을 생성할 수 있습니다. (2665225)
현재 사용 가능한 해결 방법이 없습니다. 새 버전의 Xcode를 기다려야 합니다.
EDIT 7/5/16:이 문제는 Xcode 8 베타 2에서 해결된 것으로 추정됩니다.
Xcode 8 베타 2 – IDE에서 해결됨
디버깅
- Simulator에서 앱을 디버깅할 때 로그가 표시됩니다.(26457535)
xcode 8.1(버전 8.1 베타(8T46g))에서는 더 이상 문제가 되지 않습니다.다음을 제거할 수 있습니다.OS_ACTIVITY_MODE
환경 변수를 사용할 수 있습니다.
https://developer.apple.com/go/ ?id=xcode-8.1-http-rn
디버깅
Xcode Debug Console은 Simulator에서 응용 프로그램을 디버깅할 때 더 이상 시스템 프레임워크에서 추가 로깅을 표시하지 않습니다. (2665225, 27331147
Xcode 10에서OS_ACTIVITY_MODE
가 로변 쉬운기입니다.disable
(또는)default
) 하면 ) 값은또꺼다니집한▁the▁off도 해제됩니다NSLog
비록 무엇이 …일지라도.
따라서 자신의 로그가 아닌 콘솔 노이즈를 제거하고 싶다면 오래된 것을 사용해 볼 수 있습니다.printf("")
NSLog의 영향을 받지 않기 때문에 NSLog 대신OS_ACTIVITY_MODE
=disable
.
하지만 새로운 것을 확인하는 것이 좋습니다.os_log
API 여기 있습니다.
iOS 14 Simulator의 경우 OS_ACTIVE_MODE=disable은 새로운 Swift Logger를 사용하는 로그를 표시하지 않습니다.제거하거나 사용하도록 설정해야 합니다.
저는 모든 해결책을 읽었고, 지금까지 아무 것도 작동하지 않았습니다. 저는 이 응답을 작성할 때 XCODE 12.5를 사용하고 있습니다. 이렇게 많은 불필요한 메시지가 있는 디버거에서 보는 것은 가장 짜증나는 일입니다.
제가 한 해결책은 대부분의 복잡한 해결책보다 훨씬 간단했습니다. 여기 이 성가신 문제를 해결하기 위해 제가 한 일이 있습니다.
환경 변수 등을 사용할 필요가 없습니다. 그렇지 않으면 이전 게시물에서 제안한 대로 환경 변수 등을 사용하면 이러한 경우 원하는 NSLOG 출력이 비활성화됩니다.
모든 NSLOG에 나중에 모니터링할 문자열이 포함되도록 했습니다. 예:
이전에는 다음을 수행했습니다.
NSLog(@"Hello World");
이제, 나는.
NSLog(@"[Admin]: Hello World");
반면 "[Admin]"은 내 프로그램의 이름(또는 [Admin] 이외의 원하는 문자열)입니다."
(선택적 단계) 또는 (간단하게) NSLog를 다른 글로벌 함수 "Log"로 채널링(글쎄요, 프록시)하는 함수를 작성했지만 기록된 모든 함수는 해당 함수로 이동합니다.그런 다음 Log 기능은 원래 로깅 문자열에 "[Admin]" 문자열을 추가하고 로깅 시간 및 기타 필요한 항목을 추가합니다(WebLogic 또는 다른 JAVA 로깅과 유사). 이렇게 하면 모든 로그가 하나의 표준을 따르도록 보장합니다.
여기 백만 달러짜리 핵무기가 있습니다.
이제 Debugger 창으로 이동하여 하단에 "Search" 창이 표시되고 "Filter"라고 표시된 상태에서 문자열(예: "[Admin])을 입력한 후 Enter 키를 누르고 작업을 완료합니다.
이렇게 하면 원하는 선만 볼 수 있습니다.
또한 네트워크 통신과 같이 다른 구성 요소를 필터링하려는 경우에도 유용합니다. 나중에 필터링할 수 있는 문자열을 더 많이 사용합니다.
다시 말해, 당신의 앱과 상관없는 짜증나는 로그 줄은 항상 거기에 있을 것이지만, 당신은 위의 명령을 사용하여 로그를 보지 않기로 선택하여 문제가 해결되기를 바랍니다.
모두에게 좋은 하루가 되길 바랍니다.
H
이 솔루션은 저에게 효과가 있었습니다.
- 시뮬레이터에서 앱 실행
- 로그를 .
⌘
+/
)
그러면 모든 디버그 데이터와 NSLog가 덤프됩니다.
NSLog 문만 필터링하려면 다음과 같이 하십시오.
- 를 들어, 기호 기호를 .
NSLog(@"^ Test Log")
- 오른쪽 상단의 검색 상자(위의 경우 "^")를 사용하여 결과를 필터링합니다.
다음과 같은 정보를 얻을 수 있습니다.
언급URL : https://stackoverflow.com/questions/37800790/hide-strange-unwanted-xcode-logs
'source' 카테고리의 다른 글
SVN 리비전 번호를 ASP와 동기화하려면 어떻게 해야 합니까?NET 웹사이트? (0) | 2023.04.29 |
---|---|
SQLite 데이터베이스에 대한 테이블의 열 목록을 가져오려면 어떻게 해야 합니까? (0) | 2023.04.29 |
'시스템'넷. http.HttpContent'에 'ReadAsync'에 대한 정의가 없고 확장 메서드가 없습니다. (0) | 2023.04.29 |
mongodb의 배열에 있는 모든 요소에서 필드 제거 (0) | 2023.04.29 |
셀(1,1)을 "A1"로 변환하거나 그 반대로 변환합니다. (0) | 2023.04.29 |