Ocultar logs Xcode estranhos indesejados


695

Ao usar o Xcode 8+ e criar um novo projeto em branco, os seguintes logs aparecem ao executar o aplicativo:

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

Talvez alguém já tenha encontrado uma configuração para lidar com isso?


1
Parece ser apenas informações de log de depuração que sobraram do desenvolvimento. Investigando ...
— JAL

u desativou o uso da API do vinculador dinâmico no xcode?
— Teja Nandamuri

Parece que não funcionar para mim no Xcode 8, esta solução funciona apenas para o Xcode 8 beta.
— Badal Shah

Eu tive esse problema com o Xcode 8.2.1 no El Capitan. A atualização para o macOS Sierra corrigiu o problema.
— precisa saber é o seguinte

Ainda estou vendo o problema no Xcode 9.3, enviei o Apple Bug # 34767176 (Xcode 9 exibe instruções de impressão de depuração da estrutura do sistema), que é uma duplicata do bug aberto # 32256894 Envie uma duplicata do bug para a Apple: bugreport.apple.com/web
— Paul Solt 8/18

Respostas:


1507

Tente o seguinte:

1- No menu Xcode, abra: Produto> Esquema> Editar esquema

2- Em suas variáveis ​​de ambiente, defina OS_ACTIVITY_MODE=disable

Captura de tela


25
Também funciona no Xcode 8.0, então sugiro que seja a solução.
— Nadein 14/09/16

27
Para quem se perguntando como chegar a essa tela, você precisa ir para o Produto> Esquema> Editar esquema ou Cmd + <
— chrishale

46
@ iDevzilla, Há algum problema com esta solução, ela remove algumas coisas importantes do log ao usar um dispositivo real, como dados auto-registrados. Por favor, faça uma nova visão geral, não tenho certeza de que é a solução mais ideal.
— Itai Spector

104
Infelizmente, esta opção oculta todos os NSLogs de um dispositivo real para mim ... #
— 687 Dmitry Isaev

8
O problema só resiste no simulador. Pessoalmente, não acredito que seja uma boa idéia adicionar a variável de ambiente, porque ela também oculta logs importantes, como problemas com restrições de layout e, entre outros, o exemplo que o @ AirXygène deu. No simulador, você também pode pressionar "CMD + /" para abrir o console; ele fornecerá os logs antigos. Esperemos que a Apple vai corrigir esse problema no Xcode, porém, há um grande interesse neste olhando para o número de upvotes;)
— Bocaxica

360

Com base no tweet original do @rustyshelf e resposta ilustrada do iDevzilla, aqui está uma solução que silencia o ruído do simulador sem desativar a saída NSLog do dispositivo.

  1. Em Produto> Esquema> Editar esquema ...> Executar (depurar), defina a variável de ambiente OS_ACTIVITY_MODE como $ {DEBUG_ACTIVITY_MODE} para que fique assim:

insira a descrição da imagem aqui

  1. Vá para as configurações de construção do seu projeto e clique em + para adicionar uma Configuração Definida pelo Usuário denominada DEBUG_ACTIVITY_MODE. Expanda essa configuração e clique no + ao lado de Debug para adicionar um valor específico da plataforma. Selecione a lista suspensa e altere-a para "Qualquer iOS iOS". Em seguida, defina seu valor como "desativar" para que fique assim:

insira a descrição da imagem aqui


6
@NSNoob verifique se você não tem um espaço na variável env.
— sbarow

7
Pena que esta não é a resposta aceita e pena que esta resposta está perdendo a contagem de votos para cima. Resposta muito melhor ao IMHO, pois ele desativou o OS_ACTIVITY_MODE for DEBUG baseado no simulador.
— Swany

18
Isso não funcionou para mim e nem a resposta mais votada. Usando o Xcode 8.2.1 no OS X 10.11.6 El Capitan. Mas o que funcionou foi uma combinação desta resposta e da resposta do BaseZen, usando OS_ACTIVITY_DT_MODE em vez de OS_ACTIVITY_MODE. (E inesperadamente para mim, pelo menos tanto "NÃO" e "desativar" desligado o registro galopante.)
— RenniePet

1
@RenniePet, foi exatamente o que fez por mim. Obrigado!
— Misha

8
Esta solução ocultará todo o NSLog começando com o Xcode 9. Para manter o NSLog, substitua disablepor default.
— Cœur

88

OS_ACTIVITY_MODE não funcionou para mim ( pode ter sido porque eu digitei disablecomo disabled, mas não é mais natural?!?), Ou pelo menos não impedi uma grande quantidade de mensagens. Então aqui está o verdadeiro negócio com as variáveis ​​de ambiente.

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

Portanto, definir OS_ACTIVITY_DT_MODE"NÃO" nas variáveis ​​de ambiente (método GUI explicado na captura de tela de Esquemas na resposta principal) faz com que funcione para mim.

No que diz respeito NSLogao depósito de mensagens do sistema, erros e sua própria depuração: provavelmente é necessária uma abordagem de registro real, por exemplo, https://github.com/fpillet/NSLogger .

OU

Beba o novo Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ Não é de surpreender que haja alguns problemas depois de revisar toda a API de log.

TERMO ADITIVO

Enfim, NSLogé apenas um calço:

https://developer.apple.com/library/content/releasenotes/Misc Miscellaneous/RN-Foundation-OSX10.12/

NSLog / CFLog

O NSLog agora é apenas um calço para o os_log na maioria das circunstâncias.

Agora faz sentido citar a fonte para a outra variável env. Um lugar bastante díspar, desta vez dos internos da Apple. Não sei por que eles estão sobrepostos. [Comentário incorreto sobre NSLogremovido]

[Editado em 22 de setembro]: Gostaria de saber o que "release" e "stream" fazem diferente de "debug". Fonte insuficiente.

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
É sempre bom ver uma resposta que fornece razões e antecedentes, e não apenas a solução rápida.
— JSCs

Trabalhou esta resposta usando OS_ACTIVITY_DT_MODE = NO
— Almas Adilbek

1
Isso produz um comportamento diferente de OS_ACTIVITY_MODE = desativar? Existe algum motivo para preferir esta solução?
— N8gray

1
Isso não. Esconde tudo.
— Durazno

2
@Frizlab Sim, eu mencionei ambos no meu post. Veja o "OR" ... me refiro os_loginformalmente como o novo Kool Aid.
— BaseZen 24/10

64

Um tweet tinha a resposta para mim - https://twitter.com/rustyshelf/status/775505191160328194

Para impedir que o Xcode 8 iOS Simulator faça logon como um louco, defina uma variável de ambiente OS_ACTIVITY_MODE = disable no seu esquema de depuração.

Funcionou.


6
Como já foi dito: O OS_ACTIVITY_MODE = disable desativa todos os outros logs com um NSLog.
— dzensik 27/09/16

5
Esta solução ocultará todo o NSLog começando com o Xcode 9. Para manter o NSLog, substitua disablepor default.
— Cœur

34

Encontre os passos abaixo.

  1. Selecione Produto => Esquema => Editar esquema ou use o atalho: CMD + <
  2. Selecione a Runopção do lado esquerdo.
  3. Na seção Variáveis ​​de Ambiente, inclua a variável OS_ACTIVITY_MODE = desativar

Para mais informações, consulte a representação GIF abaixo.

Editar esquema


3
Espere .... Na segunda execução, funcionou. Parabéns pelo vídeo GIF. As melhores respostas estão sempre no fundo!
— eonist

2
Esta solução ocultará todo o NSLog começando com o Xcode 9. Para manter o NSLog, substitua disablepor default.
— Cœur

33

Isso ainda não foi corrigido no Xcode Versão 8.0 beta 2 (8S162m) para mim e logs extras também estão aparecendo no console do Xcode

** EDIT 1/8/16: Isso foi reconhecido nas notas de versão do Xcode 8 Beta 4 (8S188o) como um problema ainda persistente .

Problemas conhecidos no Xcode 8 beta 4 - IDE

Depuração

• O Console de depuração do Xcode mostra o log extra das estruturas do sistema ao depurar aplicativos no Simulador. (27331147, 26652255)

Presumivelmente, isso será resolvido pelo lançamento da GM. Até então, paciência e, embora não seja o ideal, mas uma solução alternativa que estou usando está abaixo ...

Semelhante à resposta anterior, estou tendo que:

  • prefixo meus logs de impressão com algum tipo de caractere especial (por exemplo, * ou ^ ou! etc etc)

  • Em seguida, use a caixa de pesquisa na parte inferior direita do painel do console para filtrar meus logs do console, inserindo o caractere especial escolhido para fazer com que o console exiba meus logs de impressão conforme pretendido

console


1
@SimplyLearning, você encontrará essas informações em todo o twitter. Mas você pode conferir este site oficial da apple: developer.apple.com/news ou seu feed de notícias para obter atualizações quando os publicarem: developer.apple.com/news/rss/news.rss A propósito: isso ainda parece ser um problema no Xcode Beta 3.
— benrudhart

50
Acabei de adquirir o Xcode 8 GM, e o problema ainda persiste. Muito irritante!!
— AdamM

8
Acabei de baixar o Xcode Versão 8.0 (8A218a) da App Store. A questão ainda está lá.
— Statik

4
Apenas ridículo. Ainda lá na versão final do MAS.
— Shai Mishali 15/09/16

1
Usamos um prefixo de tag para filtragem. Alguns problemas são: Várias linhas mostrarão apenas a primeira. Ao usar o lldb para depuração, você precisa alternar a filtragem. Realmente muito triste que, a partir de hoje, o console seja extremamente limitado. Temos um aplicativo para filtragem decente, mas precisamos copiar / colar do console. Que triste.
— precisa saber é o seguinte

23

Minha solução é usar o comando debugger e / ou a mensagem de log nos pontos de interrupção.

insira a descrição da imagem aqui

E mude a saída do console de All Output para Debugger Output como

insira a descrição da imagem aqui


14

Bem. Parece haver muita comoção sobre esse assunto, então darei a todos uma maneira de persistir sem usar esse truque de esquema. Abordarei o iOS Simulator especificamente, mas isso também pode ser necessário para o TV Sim, que está localizado em um diretório diferente.

O problema que está causando tudo isso são listas localizadas no diretório Xcode. Há um processo iniciado chamado configd_sim quando o Sim é iniciado, que lê as listas e imprime as informações de depuração, se as listas especificarem que devem ser registradas.

As listas estão localizadas aqui:

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

Se você está brincando com uma versão beta, observe que o diretório será diferente.

Você verá inúmeras listas neste diretório. Agora, crie e execute seu aplicativo e observe os logs. Você está procurando o conteúdo imediatamente seguido pelo subsistema: parte. É o nome imediatamente a seguir que representa a lista problemática correspondente.

insira a descrição da imagem aqui

A partir daí, modifique o plist para eliminar a chave / valor [Level] de depuração, que é um dicionário que contém o "Enable" => "Default" chave / valor ... ou simplesmente exclua o plist. Observe que você precisará ser root para executar uma dessas opções, pois elas estão localizadas no aplicativo Xcode.

o plutil -pcomando também pode ser útil para você. ie

plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.apple.BackBoardServices.fence.plist

Isso me deu um dos argumentos problemáticos que continham:

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

Boa sorte :]


Fiz um zip e excluí-o caso precise restaurar.
— precisa saber é o seguinte

1
Descobri que isso não conseguiu silenciar muitos códigos de rede, provavelmente porque falta um nome de subsistema:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
— BaseZen

@BaseZen Infelizmente, eu apenas resolvi a questão dos OPs que não continha nenhum problema de log de tcp. Você pode criar uma nova postagem de SO se precisar de ajuda para resolver esse problema.
— Cometa de Sozin,

13

Isso está relacionado a um problema conhecido com o registro encontrado nas Notas da versão beta do Xcode 8 (também foi solicitado a um engenheiro da WWDC).

Ao depurar aplicativos WatchOS no simulador do Watch, o sistema operacional pode produzir uma quantidade excessiva de log inútil. (26652255)

No momento, não há uma solução alternativa disponível. Você deve aguardar uma nova versão do Xcode.

EDIT 7/5/16: supostamente foi corrigido a partir do Xcode 8 Beta 2:

Resolvido no Xcode 8 beta 2 - IDE

Depuração

  • Ao depurar um aplicativo no Simulador, os logs são visíveis. (26457535)

Notas da versão do Xcode 8 Beta 2


Pensei isso também, mas não estou usando um aplicativo watchOS nem um simulador de watchOS. Mas ainda pode acontecer com outros Sims também. Suspenda por enquanto e veja se um determinado Xcode 8 Beta o corrigirá nas próximas semanas / meses.
— Hans Knöchel

O @HansKnoechel também não sou, mas posso confirmar que esse problema ocorre com qualquer aplicativo. Nenhuma palavra "oficial" da Apple além das notas de versão e algumas discussões na WWDC.
— JAL

obrigado, mesmo aqui! Devemos falar sobre isso amanhã durante a WWDC, hehe :-)
— Hans Knöchel

Também acontece no meu iPhone 5s Simulator, provavelmente em todos os simuladores.
— SimplGy

Eu não poderia obter acesso ao link nesta resposta, apesar de ter sido assinado, mas este link funciona: adcdownload.apple.com/WWDC_2016/Xcode_8_beta/...
— SimplGy

7

Isso não é mais um problema no xcode 8.1 (versão testada 8.1 beta (8T46g)) . Você pode remover oOS_ACTIVITY_MODE variável de ambiente do seu esquema.

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

Depuração

• O Console de depuração do Xcode não mostra mais o log extra das estruturas do sistema ao depurar aplicativos no Simulador. (26652255, 27331147)


20
Ainda estou recebendo muitos registros espúrios no 8.1. Soquete principalmente estranho e coisas de conexão TCP. Mais alguém, ou apenas eu?
— Jordan Smith

3
Acabei de baixar o Xcode 8.1 hoje (31/10/2016) e ainda vejo alguns logs de depuração como este [MC] Reading from private effective user settings.em um novo projeto fictício em branco Arquivo> Novo> Projeto.
— Zhang

4

No Xcode 10, a OS_ACTIVITY_MODEvariável com disable(ou default) valor também desliga, NSLognão importa o quê.

Portanto, se você quiser se livrar do ruído do console, mas não dos seus próprios logs, tente o bom e velho em printf("")vez do NSLog, pois ele não é afetado pelo OS_ACTIVITY_MODE=disable .

Mas é melhor conferir a nova os_logAPI aqui .


1

Esta solução está funcionando para mim:

  1. Execute o aplicativo no simulador
  2. Abra o log do sistema ( ⌘+ /)

Isso irá despejar todos os dados de depuração e também os seus NSLogs.

Para filtrar apenas suas instruções NSLog:

  1. Prefixe cada um com um símbolo, por exemplo: NSLog(@"^ Test Log")
  2. Filtre os resultados usando a caixa de pesquisa no canto superior direito, "^" no caso acima

Isto é o que você deve obter:

Captura de tela do console

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.