이상한 원치 않는 Xcode 로그 숨기기


696

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
개발에서 남은 디버그 로깅 정보 인 것 같습니다. 조사 중 ...
JAL

xcode에서 동적 링커 API 사용을 해제 했습니까?
Teja Nandamuri 2016 년

Xcode 8에서 나를 위해 작동하지 않는 것처럼 보입니다.이 솔루션은 Xcode 8 베타에서만 작동합니다.
Badal Shah

El Capitan의 Xcode 8.2.1 에서이 문제가 발생했습니다. macOS Sierra로 업그레이드하면 문제가 해결되었습니다.
hwaxxer 2018 년

여전히 Xcode 9.3에서 문제가 발생합니다. 공개 버그 # 32256894의 Apple Bug # 34767176 (Xcode 9 Displays System Framework Debug Print Statements)을 제출했습니다.이 버그는 Apple에 제출하십시오. bugreport.apple.com/web
Paul Solt

답변:


1508

이 시도:

1- Xcode 메뉴에서 열기 : 제품> 구성표> 구성표 편집

2- 환경 변수 설정 OS_ACTIVITY_MODE=disable

스크린 샷


25
Xcode 8.0 릴리스에서도 작동하므로 솔루션이라고 제안합니다.
nadein

27
해당 화면에 도착하는 방법을 생각해 누군가를 위해, 당신은 제품> 계획> 편집 계획 또는 Cmd를 +에 갈 필요가 <
chrishale

46
@ iDevzilla,이 솔루션에는 몇 가지 문제가 있습니다. 자체 기록 데이터와 같은 실제 장치를 사용할 때 로그에서 중요한 부분을 제거합니다. 다시 개요를 확인하십시오. 이것이 가장 이상적인 솔루션인지 확실하지 않습니다.
Itai Spector

104
불행하게도,이 옵션을 숨 깁니다 모두 NSLog나를 위해 실제 장치에서의 ...
드미트리 Isaev

8
시뮬레이터에서만 문제가 발생합니다. 개인적으로 환경 변수를 추가하는 것은 좋은 생각이 아닙니다. 레이아웃 제약 문제와 같은 중요한 로그를 숨기고 @ AirXygène의 예와 같은 중요한 로그도 숨기기 때문입니다. 시뮬레이터에서 "CMD + /"를 눌러 콘솔을 열면 구식 로그를 제공합니다. 잘만되면 애플은 Xcode에서이 문제를 해결할 것입니다.
공보

360

@rustyshelf 의 원래 트윗 과 iDevzilla의 답변에 대한 설명을 바탕으로 장치의 NSLog 출력을 비활성화하지 않고 시뮬레이터의 소음을 제거하는 솔루션이 있습니다.

  1. 제품> 구성표> 구성표 편집 ...> 실행 (디버그)에서 OS_ACTIVITY_MODE 환경 변수를 $ {DEBUG_ACTIVITY_MODE}로 설정하여 다음과 같이하십시오.

여기에 이미지 설명을 입력하십시오

  1. 프로젝트 빌드 설정으로 이동하고 +를 클릭하여 DEBUG_ACTIVITY_MODE라는 사용자 정의 설정을 추가하십시오. 이 설정을 펼치고 디버그 옆의 +를 클릭하여 플랫폼 별 값을 추가하십시오. 드롭 다운을 선택하고 "모든 iOS 시뮬레이터"로 변경하십시오. 그런 다음 값을 "disable"로 설정하여 다음과 같이하십시오.

여기에 이미지 설명을 입력하십시오


6
@NSNoob은 env 변수에 공백이 없는지 확인하십시오.
sbarow

7
너무 안타깝게도 받아 들여지는 답변이 아니고 너무 안타깝게도이 투표로 인해 투표 수가 올라갑니다. 시뮬레이터에서 DEBUG 빌드에 대해 OS_ACTIVITY_MODE 만 비활성화했기 때문에 IMHO에 대한 답변이 훨씬 낫습니다.
Swany

18
이것은 저에게 효과적이지 않았으며 가장 인기있는 답변도 아닙니다. OS X 10.11.6 El Capitan에서 Xcode 8.2.1 사용. 그러나 작동 한 것은 OS_ACTIVITY_MODE 대신 OS_ACTIVITY_DT_MODE를 사용 하여이 답변과 BaseZen이 작성한 것입니다. (그리고 예기치 않게 나를 위해 최소한 "NO"와 "disable"둘 다
만재

1
@RenniePet, 그것이 저를 위해 정확히 한 일입니다. 감사!
Misha

8
이 솔루션은 NSLog을 유지하기 위해 엑스 코드 (9)로 시작하는 모든 NSLog를 숨길 교체 disable와 함께 default.
Cœur

88

OS_ACTIVITY_MODE는 (나를 위해 일을하지 않았다 있습니다 내가 typo'd 때문이었다 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환경 변수 (주요 답변의 Schemes 스크린 샷에서 설명하는 GUI 방법)에서 "NO"로 설정 하면 효과적입니다.

마찬가지로 지금까지와 같은 NSLog시스템 메시지, 오류 및 자신의 디버깅에 대한 덤핑 지상되는 : 실제 로깅 방법은 아마도, 예를 들어, 어쨌든 호출됩니다 https://github.com/fpillet/NSLogger .

또는

: 새로운 쿨 에이드 한잔 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는 이제 대부분의 상황에서 os_log에 대한 shim 일뿐입니다.

이제 다른 env 변수의 소스를 인용하는 것이 합리적입니다. 이번에는 Apple 내부와는 상당히 다른 곳입니다. 왜 겹치는 지 확실하지 않습니다. [ NSLog삭제 에 대한 잘못된 설명 ]

[편집 9 월 22 일] : "release"와 "stream"이 "debug"와 다른 점이 궁금합니다. 소스가 충분하지 않습니다.

https://github.com/macosforge/libdispatch/blob/8e63547ea4e5abbfe55c0c3064181c4950a791d3/src/voucher.c

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;
    }
}

11
빠른 수정보다는 이유와 배경을 제공하는 답변을 항상 참조하십시오.
jscs

OS_ACTIVITY_DT_MODE = NO를 사용하여이 대답을 근무
마스 Adilbek

1
이로 인해 OS_ACTIVITY_MODE = disable과 다른 동작이 발생합니까? 이 솔루션을 선호 할만한 이유가 있습니까?
n8gray

1
그렇지 않습니다. 모든 것을 숨 깁니다.
durazno

2
@ Frizlab 예 내 게시물에 둘 다 언급합니다. "OR"을 참조하십시오. 나는 os_log비공식적으로 새로운 Kool Aid라고합니다.
BaseZen

64

트윗 나를 위해 대답을했다 - https://twitter.com/rustyshelf/status/775505191160328194

Xcode 8 iOS 시뮬레이터가 미친 것처럼 로깅되지 않게하려면 디버그 체계에서 환경 변수 OS_ACTIVITY_MODE = disable을 설정하십시오.

효과가있었습니다.


6
이미 말했듯이 : OS_ACTIVITY_MODE = disable은 NSLog를 사용하여 다른 모든 로깅을 비활성화합니다.
dzensik

5
이 솔루션은 NSLog을 유지하기 위해 엑스 코드 (9)로 시작하는 모든 NSLog를 숨길 교체 disable와 함께 default.
Cœur

34

아래 단계를 찾으십시오.

  1. 제품 => 구성표 => 구성표 편집을 선택하거나 바로 가기를 사용하십시오. CMD + <
  2. Run왼쪽 에서 옵션을 선택하십시오 .
  3. 환경 변수 섹션에서 OS_ACTIVITY_MODE = disable 변수를 추가하십시오.

자세한 내용은 아래 GIF 표현을 참조하십시오.

체계 편집


3
잠깐만 .... 두 번째 실행에서 작동했습니다. Gif 비디오를위한 전문가. 가장 좋은 답변은 항상 바닥에 있습니다!
eonist

2
이 솔루션은 NSLog을 유지하기 위해 엑스 코드 (9)로 시작하는 모든 NSLog를 숨길 교체 disable와 함께 default.
Cœur

33

이것은 여전히 ​​Xcode 버전 8.0 베타 2 (8S162m)에서 수정되지 않았으며 Xcode 콘솔에도 추가 로그가 표시됩니다

** 편집 8/1/16 : 이것은 Xcode 8 Beta 4 (8S188o)릴리스 노트에서 여전히 문제가 지속되는 것으로 인정되었습니다 .

Xcode 8 베타 4의 알려진 문제점 – IDE

디버깅

• Xcode 디버그 콘솔은 시뮬레이터에서 응용 프로그램을 디버깅 할 때 시스템 프레임 워크에서 추가 로깅을 표시합니다. (27331147, 26652255)

아마도 이것은 GM 릴리스에 의해 해결 될 것입니다. 그때까지 인내심이 있지만 이상적이지는 않지만 사용중인 해결 방법은 다음과 같습니다.

이전 답변과 비슷하게해야합니다.

  • 인쇄 로그 앞에 특수 문자 (예 : * 또는 ^ 또는! 등)를 붙입니다.

  • 그런 다음 콘솔 창의 오른쪽 아래에있는 검색 상자를 사용하여 선택한 특수 문자를 입력하여 콘솔에 인쇄 로그를 표시하도록 콘솔 로그를 필터링하십시오.

콘솔


1
@SimplyLearning 트위터에서이 정보를 찾을 수 있습니다. :하지만 당신은이 공식 사과의 웹 사이트를 체크 아웃 할 수 developer.apple.com/news 하거나 게시 할 때 업데이트를 위해 자신의 뉴스 피드 : developer.apple.com/news/rss/news.rss을 그건 그렇고을이 여전히 보인다 Xcode Beta 3에서 문제가 될 것입니다.
benrudhart

50
Xcode 8 GM을 방금 받았는데도 문제는 계속 지속됩니다. 매우 성가신 !!
AdamM

8
App Store에서 Xcode 버전 8.0 (8A218a)을 다운로드했습니다. 문제는 여전히 있습니다.
Statik

4
말도 안돼 Final MAS 버전에는 여전히 있습니다.
Shai Mishali

1
필터링을 위해 태그 접두사를 사용합니다. 일부 문제는 다음과 같습니다. 여러 줄은 첫 번째 줄만 표시합니다. 디버깅에 lldb를 사용할 때는 필터링을 토글해야합니다. 오늘은 콘솔이 극도로 제한되어 있다는 것이 정말 슬픈 일입니다. 적절한 필터링을위한 앱이 있지만 콘솔에서 복사 / 붙여 넣기를해야합니다. 얼마나 슬픈.
bauerMusic

23

내 솔루션은 중단 점에서 디버거 명령 및 / 또는 로그 메시지 를 사용하는 것 입니다.

여기에 이미지 설명을 입력하십시오

그리고에서 콘솔의 출력을 변경할 모든 출력디버거 출력

여기에 이미지 설명을 입력하십시오


14

좋구나. 이것에 대해 많은 동요가있는 것 같습니다. 그래서 나는 그 체계 트릭을 사용하지 않고 그것을 유지할 수있는 방법을 모두 줄 것입니다. iOS 시뮬레이터를 구체적으로 다룰 것이지만 이것은 다른 디렉토리에있는 TV Sim에도 적용될 필요가 있습니다.

이 모든 것들을 일으키는 문제는 Xcode 디렉토리 내에있는 plist입니다. Sim이 시작될 때 plists를 읽고 plists가 로깅되어야한다고 지정하면 디버깅 정보를 인쇄하는 configd_sim 이라는 프로세스가 시작 됩니다.

plist는 다음 위치에 있습니다.

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems

베타 버전으로 게임을하는 경우에는 디렉토리가 다를 수 있습니다.

이 디렉토리에는 수많은 plist가 있습니다. 이제 애플리케이션을 빌드하고 실행하고 로그를 관찰하십시오. 컨텐츠 바로 뒤에 서브 시스템 : 부분을 찾고 있습니다. 문제가되는 plist를 나타내는 바로 뒤에 나오는 이름입니다.

여기에 이미지 설명을 입력하십시오

여기에서 plist를 수정하여 키 / 값이 포함 된 사전 인 디버깅 [Level] 키 / 값을 제거 "Enable" => "Default"하거나 간단히 plist를 삭제하십시오. 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

이것은 나에게 포함 된 문제가있는 plists 중 하나를 주었다.

{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}

행운을 빕니다 :]


복원이 필요한 경우 압축 한 다음 삭제했습니다.
dandan78

1
나는 이것이 많은 네트워킹 코드를 침묵시킬 수 없다는 것을 발견했다. 아마도 서브 시스템 이름이 없기 때문일 것이다.2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen

@BaseZen 불행히도, tcp 로깅 문제가없는 OPs 질문 만 해결했습니다. 이 문제를 해결하는 데 도움이 필요한 경우 새 SO 게시물을 만들 수 있습니다.
소진의 혜성

13

이는 Xcode 8 베타 릴리스 노트 (WWDC의 엔지니어에게 문의)에있는 로깅과 관련된 알려진 문제와 관련이 있습니다.

Watch 시뮬레이터에서 WatchOS 응용 프로그램을 디버깅 할 때 OS에서 과도한 양의 도움이되지 않는 로깅이 생성 될 수 있습니다. (26652255)

현재 사용할 수있는 해결 방법이 없으므로 새 버전의 Xcode를 기다려야합니다.

편집 7/5/16 : 이것은 아마도 Xcode 8 Beta 2에서 수정되었습니다.

Xcode 8 베타 2에서 해결 – IDE

디버깅

  • 시뮬레이터에서 앱을 디버깅 할 때 로그가 표시됩니다. (26457535)

Xcode 8 베타 2 릴리스 정보


그것도 생각했지만 watchOS 응용 프로그램이나 watchOS 시뮬레이터를 사용하지 않습니다. 그러나 여전히 다른 심들에게도 일어날 수 있습니다. 지금 보류하고 특정 Xcode 8 베타가 다음 주 / 월에 걸쳐 수정되는지 확인하십시오.
Hans Knöchel 2016 년

@ HansKnoechel 나도 아니지만이 문제가 모든 응용 프로그램에서 발생한다는 것을 확인할 수 있습니다. 릴리즈 노트와 WWDC에 대한 논의 외에 애플의 "공식적인"단어는 없습니다.
JAL

고마워요! 우리는 내일 WWDC에서 그 이야기를해야합니다. hehe :-)
Hans Knöchel

내 iPhone 5s Simulator, 아마도 모든 시뮬레이터에서도 발생합니다.
SimplGy 2016 년

로그인 한 상태 에서도이
SimplGy

7

이것은 xcode 8.1에서 더 이상 문제가되지 않습니다 (테스트 된 버전 8.1 베타 (8T46g)) . OS_ACTIVITY_MODE구성표에서 환경 변수를 제거 할 수 있습니다 .

https://developer.apple.com/go/?id=xcode-8.1-beta-rn

디버깅

• 시뮬레이터에서 응용 프로그램을 디버깅 할 때 Xcode 디버그 콘솔에 더 이상 시스템 프레임 워크에서 추가 로깅이 표시되지 않습니다. (26652255, 27331147)


20
8.1에서는 여전히 많은 가짜 로깅을 받고 있습니다. 대부분 이상한 소켓과 TCP 연결 관련 사항. 다른 사람이나 나만?
Jordan Smith

3
방금 Xcode 8.1을 오늘 (2016 년 10 월 31 일) 다운로드했으며 여전히 [MC] Reading from private effective user settings.빈 새 더미 프로젝트 File> New> Project에서 이와 같은 디버깅 로깅이 표시 됩니다.
Zhang

4

에서 엑스 코드 (10)OS_ACTIVITY_MODE 와 변수 disable(또는 default) 값도 해제하지 NSLog상관없이.

따라서 콘솔 노이즈를 제거하고 자신의 로그 printf("")는 제거하지 않으려면 NSLog 대신 OS_ACTIVITY_MODE=로 영향을받지 않기 때문에 NSLog 대신 오래된 것을 시도해 볼 수 disable있습니다.

그러나 여기서 새로운 os_logAPI를 확인하는 것이 좋습니다 .


1

이 솔루션은 저에게 효과적이었습니다.

  1. 시뮬레이터에서 앱을 실행하십시오.
  2. 시스템 로그를 엽니 다 ( + /)

그러면 모든 디버그 데이터와 NSLog가 덤프됩니다.

NSLog 문만 필터링하려면 :

  1. 예를 들어, 각각 앞에 기호를 붙입니다. NSLog(@"^ Test Log")
  2. 위의 경우 오른쪽 상단의 검색 창 "^"을 사용하여 결과를 필터링하십시오.

이것이 당신이 얻는 것입니다 :

콘솔의 스크린 샷

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