Masquer les journaux Xcode étranges indésirables

695

Lorsque vous utilisez Xcode 8+ et créez un nouveau projet vierge, les journaux suivants apparaissent lors de l'exécution de l'application:

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

Peut-être que quelqu'un a déjà trouvé une configuration à gérer?

Hans Knöchel
la source
1
Semble être juste des informations de journalisation de débogage laissées par le développement. Enquête ...
JAL
avez-vous désactivé l'utilisation de l'API de l'éditeur de liens dynamiques dans xcode?
Teja Nandamuri
Ne fonctionne pas pour moi dans Xcode 8 semble, cette solution ne fonctionne que pour Xcode 8 beta.
Badal Shah
J'ai eu ce problème avec Xcode 8.2.1 sur El Capitan. La mise à niveau vers macOS Sierra a résolu le problème.
hwaxxer
Je vois toujours le problème sur Xcode 9.3, j'ai soumis le bogue Apple n ° 34767176 (Xcode 9 affiche les instructions d'impression de débogage du cadre système), qui est un double du bogue ouvert # 32256894 Veuillez soumettre un double du bogue à Apple: bugreport.apple.com/web
Paul Solt

Réponses:

1507

Essaye ça:

1- Depuis le menu Xcode ouvert: Produit> Schéma> Modifier le schéma

2- Sur vos variables d'environnement set OS_ACTIVITY_MODE=disable

Capture d'écran

iDevzilla
la source
25
Il fonctionne également sur la version Xcode 8.0, donc je suggère que c'est la solution.
nadein
27
Pour ceux qui se demandent comment accéder à cet écran, vous devez aller dans Produit> Schéma> Modifier le schéma ou Cmd + <
chrishale
46
@iDevzilla, il y a un problème avec cette solution, elle supprime certaines choses importantes du journal lors de l'utilisation d'un appareil réel, comme les données auto-enregistrées. Veuillez l'apercevoir à nouveau, je ne suis pas sûr que ce soit la solution la plus idéale.
Itai Spector du
104
Malheureusement, cette option cache tous les NSLogs d'un vrai appareil pour moi ...
Dmitry Isaev
8
Le problème ne résiste que dans Simulator. Personnellement, je ne pense pas que ce soit une bonne idée d'ajouter la variable d'environnement, car elle cache également des journaux importants comme des problèmes avec les contraintes de mise en page et entre autres l'exemple donné par @ AirXygène. Dans le simulateur, vous pouvez également appuyer sur "CMD + /" pour ouvrir la console, il vous donnera les journaux à l'ancienne. Espérons qu'Apple corrigera ce problème dans Xcode, il y a beaucoup d'intérêt à voir le nombre de votes positifs;)
Bocaxica
360

S'appuyant sur le tweet original de @rustyshelf et la réponse illustrée d'iDevzilla, voici une solution qui réduit le bruit du simulateur sans désactiver la sortie NSLog de l'appareil.

  1. Sous Produit> Schéma> Modifier le schéma ...> Exécuter (débogage), définissez la variable d'environnement OS_ACTIVITY_MODE sur $ {DEBUG_ACTIVITY_MODE} pour qu'elle ressemble à ceci:

entrez la description de l'image ici

  1. Accédez aux paramètres de génération de votre projet et cliquez sur + pour ajouter un paramètre défini par l'utilisateur nommé DEBUG_ACTIVITY_MODE. Développez ce paramètre et cliquez sur le + à côté de Déboguer pour ajouter une valeur spécifique à la plate-forme. Sélectionnez la liste déroulante et changez-la en "Any iOS Simulator". Définissez ensuite sa valeur sur "disable" pour qu'elle ressemble à ceci:

entrez la description de l'image ici

cduhn
la source
6
@NSNoob assurez-vous que vous n'avez pas d'espace dans la variable env.
sbarow
7
Dommage que ce ne soit pas la réponse acceptée et dommage que cette réponse perde le décompte des voix. Beaucoup mieux répondre à mon humble avis car il a seulement désactivé OS_ACTIVITY_MODE pour DEBUG s'appuie sur le simulateur.
Swany
18
Cela n'a pas fonctionné pour moi, pas plus que la réponse la plus votée. Utilisation de Xcode 8.2.1 sur OS X 10.11.6 El Capitan. Mais ce qui a fonctionné était une combinaison de cette réponse et celle de BaseZen, en utilisant OS_ACTIVITY_DT_MODE au lieu de OS_ACTIVITY_MODE. (Et de manière inattendue pour moi, au moins "NON" et "désactiver" ont désactivé l'enregistrement rampant.)
RenniePet
1
@RenniePet, c'est exactement ce qui l'a fait pour moi. Merci!
Misha
8
Cette solution masquera tous les NSLog commençant par Xcode 9. Pour conserver NSLog, remplacez disablepar default.
Cœur
88

OS_ACTIVITY_MODE n'a pas fonctionné pour moi (il peut être parce que je typo'd disablecomme disabled, mais est -ce pas plus naturel?!?), Ou du moins n'a pas empêché beaucoup de messages. Voici donc la vraie affaire avec les variables d'environnement.

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

Donc, le réglage OS_ACTIVITY_DT_MODEsur "NON" dans les variables d'environnement (méthode GUI expliquée dans la capture d'écran des schémas dans la réponse principale) le fait fonctionner pour moi.

En ce qui concerne NSLogle dépotoir pour les messages système, les erreurs et votre propre débogage: une véritable approche de journalisation est probablement nécessaire de toute façon, par exemple https://github.com/fpillet/NSLogger .

OU

Buvez le nouveau Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ Il n'est pas surprenant qu'il y ait quelques problèmes après avoir révisé l'ensemble API de journalisation.

ADDENDA

Quoi qu'il en soit, NSLogc'est juste une cale:

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

NSLog / CFLog

NSLog est maintenant juste une cale à os_log dans la plupart des circonstances.

Cela n'a de sens que de citer la source de l'autre variable env. Un endroit assez disparate, cette fois par rapport aux internes d'Apple. Je ne sais pas pourquoi ils se chevauchent. [Commentaire incorrect sur NSLogsupprimé]

[Modifié le 22 sept.]: Je me demande ce que «libération» et «flux» font différemment que «débogage». Pas assez de source.

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;
    }
}
BaseZen
la source
11
Toujours agréable de voir une réponse qui fournit des raisons et des antécédents plutôt qu'une simple solution rapide.
jscs
A travaillé cette réponse en utilisant OS_ACTIVITY_DT_MODE = NO
Almas Adilbek le
1
Cela produit-il un comportement différent de celui de OS_ACTIVITY_MODE = désactiver? Y a-t-il une raison de préférer cette solution?
n8gray
1
Ce ne est pas. Il cache tout.
durazno
2
@Frizlab Oui, je mentionne les deux dans mon message. Voir le "OU" ... Je me réfère os_logofficieusement au nouveau Kool Aid.
BaseZen
64

Un tweet avait la réponse pour moi - https://twitter.com/rustyshelf/status/775505191160328194

Pour empêcher le simulateur iOS Xcode 8 de se connecter comme un fou, définissez une variable d'environnement OS_ACTIVITY_MODE = désactiver dans votre schéma de débogage.

Ça a marché.

Peter Smith
la source
6
Comme déjà dit: OS_ACTIVITY_MODE = disable désactive toutes les autres journalisations avec un NSLog.
dzensik
5
Cette solution masquera tous les NSLog commençant par Xcode 9. Pour conserver NSLog, remplacez disablepar default.
Cœur
34

Veuillez trouver les étapes ci-dessous.

  1. Sélectionnez Produit => Schéma => Modifier le schéma ou utilisez un raccourci: CMD + <
  2. Sélectionnez l' Runoption sur le côté gauche.
  3. Dans la section Variables d'environnement, ajoutez la variable OS_ACTIVITY_MODE = disable

Pour plus d'informations, veuillez trouver la représentation GIF ci-dessous.

Modifier le schéma

Ramkrishna Sharma
la source
3
Attendez .... Au deuxième essai, cela a fonctionné. Bravo pour la vidéo Gif. Les meilleures réponses sont toujours en bas!
eonist
2
Cette solution masquera tous les NSLog commençant par Xcode 9. Pour conserver NSLog, remplacez disablepar default.
Cœur
33

Cela n'est toujours pas résolu dans Xcode Version 8.0 beta 2 (8S162m) pour moi et des journaux supplémentaires apparaissent également dans la console Xcode

** EDIT 8/1/16: Cela a été reconnu dans les notes de publication pour Xcode 8 Beta 4 (8S188o) car un problème persiste .

Problèmes connus dans Xcode 8 beta 4 - IDE

Débogage

• La console de débogage Xcode affiche une journalisation supplémentaire des infrastructures système lors du débogage des applications dans le simulateur. (27331147, 26652255)

Vraisemblablement, cela sera résolu par la version GM. Jusque-là, patience et bien que pas idéal mais une solution de contournement que j'utilise est ci-dessous ...

Semblable à la réponse précédente, je dois:

  • préfixer mes journaux d'impression avec une sorte de caractère spécial (par exemple * ou ^ ou! etc etc)

  • Utilisez ensuite la zone de recherche en bas à droite du volet de la console pour filtrer les journaux de ma console en saisissant le caractère spécial que j'ai choisi pour que la console affiche mes journaux d'impression comme prévu.

console

Pez
la source
1
@SimplyLearning, vous trouverez ces informations partout sur Twitter. Mais vous pouvez consulter ce site officiel d'Apple: developer.apple.com/news ou leur fil d'actualité pour obtenir des mises à jour lorsqu'ils les publient: developer.apple.com/news/rss/news.rss Au fait: cela semble toujours être un problème dans Xcode Beta 3.
benrudhart
50
Je viens de recevoir Xcode 8 GM et le problème persiste. Très ennuyant!!
AdamM
8
Je viens de télécharger Xcode Version 8.0 (8A218a) sur l'App Store. Le problème est toujours là.
Statik
4
Tout simplement ridicule. Toujours là en version Final MAS.
Shai Mishali
1
Nous utilisons un tag-prefix pour le filtrage. Certains problèmes sont les suivants: plusieurs lignes n'afficheront que la première. Lorsque vous utilisez lldb pour le débogage, vous devez basculer le filtrage. Vraiment vraiment triste que la console soit extrêmement limitée à ce jour. Nous avons une application pour un filtrage décent, mais nous devons copier / coller à partir de la console. Quelle tristesse.
bauerMusic
23

Ma solution consiste à utiliser la commande de débogage et / ou le message de journal dans les points d'arrêt.

entrez la description de l'image ici

Et changez la sortie de la console de Toutes les sorties en Sortie du débogueur comme

entrez la description de l'image ici

mrahmiao
la source
14

Bien. Il semble y avoir beaucoup d'agitation à propos de celui-ci, donc je vais vous donner un moyen de le persister sans utiliser cette astuce de schéma. J'aborderai spécifiquement le simulateur iOS, mais cela pourrait également devoir être appliqué pour le Sim TV qui se trouve également dans un répertoire différent.

Le problème qui cause tout cela est les listes situées dans le répertoire Xcode. Il y a un processus qui est lancé appelé configd_sim lorsque le Sim démarre qui lit les plists et imprime les informations de débogage si les plists spécifient qu'elles doivent être enregistrées.

Les plists sont situés ici:

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

Si vous jouez avec une version bêta, notez que le dir sera différent.

Vous verrez de nombreux plists dans ce répertoire. Maintenant, générez et exécutez votre application et observez les journaux. Vous recherchez le contenu immédiatement suivi du sous - système: part. C'est le nom qui suit immédiatement celui-ci qui représente la liste problématique correspondante.

entrez la description de l'image ici

À partir de là, modifiez le plist pour éliminer la clé / valeur de débogage [Niveau] qui est un dictionnaire contenant le "Enable" => "Default" clé / valeur ... ou supprimez simplement le plist. Notez que vous devrez être root pour effectuer l'une ou l'autre de ces opérations car elles se trouvent dans l'application Xcode.

la plutil -pcommande pourrait également vous être utile. c'est à dire

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

Cela m'a donné l'une des listes problématiques qui contenait:

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

Bonne chance :]

Comète de Sozin
la source
J'ai zippé, puis supprimé au cas où je devrais restaurer.
dandan78
1
J'ai trouvé que cela ne permettait pas de réduire au silence beaucoup de code réseau, probablement parce qu'il manquait un nom de sous-système:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen
@BaseZen Malheureusement, je n'ai abordé que la question des OP qui ne contenait aucun problème de journalisation TCP. Vous pouvez créer une nouvelle publication SO si vous avez besoin d'aide pour résoudre ce problème.
La comète de Sozin du
13

Ceci est lié à un problème connu de journalisation trouvé dans les notes de version Xcode 8 Beta (également demandé à un ingénieur de la WWDC).

Lors du débogage des applications WatchOS dans le simulateur Watch, le système d'exploitation peut produire une quantité excessive de journalisation inutile. (26652255)

Il n'y a actuellement aucune solution de contournement disponible, vous devez attendre une nouvelle version de Xcode.

EDIT 7/5/16: Ceci est censé être corrigé à partir de Xcode 8 Beta 2:

Résolu dans Xcode 8 beta 2 - IDE

Débogage

  • Lors du débogage d'une application sur le simulateur, les journaux sont visibles. (26457535)

Notes de publication de Xcode 8 Beta 2

JAL
la source
J'ai pensé cela aussi, mais je n'utilise ni application watchOS ni simulateur watchOS. Mais cela pourrait aussi arriver à d'autres Sims. Mettre en attente pour l'instant et voir si un certain Xcode 8 Beta le corrigera au cours des prochaines semaines / mois.
Hans Knöchel
@HansKnoechel non plus, mais je peux confirmer que ce problème se produit avec n'importe quelle application. Aucun mot "officiel" d'Apple à part les notes de publication et quelques discussions à la WWDC.
JAL
merci, même ici! Nous devrions en parler demain lors de la WWDC, hehe :-)
Hans Knöchel
Cela se produit également pour mon simulateur iPhone 5s, probablement tous les simulateurs.
SimplGy
Je n'ai pas pu accéder au lien dans cette réponse, malgré ma
SimplGy
7

Ce n'est plus un problème dans xcode 8.1 (version testée 8.1 bêta (8T46g)) . Vous pouvez supprimer la OS_ACTIVITY_MODEvariable d'environnement de votre schéma.

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

Débogage

• La console de débogage Xcode n'affiche plus de journalisation supplémentaire des infrastructures système lors du débogage des applications dans le simulateur. (26652255, 27331147)

mriddle89
la source
20
Je reçois toujours beaucoup de fausses connexions dans 8.1. Surtout des trucs de connexion socket et tcp. Quelqu'un d'autre ou juste moi?
Jordan Smith
3
Je viens de télécharger Xcode 8.1 aujourd'hui (31/10/2016) et je vois toujours une journalisation de débogage comme celle-ci à [MC] Reading from private effective user settings.partir d'un nouveau projet factice vierge Fichier> Nouveau> Projet.
Zhang
4

Dans Xcode 10, la OS_ACTIVITY_MODEvariable avec disable(ou default) valeur désactive également NSLogquoi qu'il arrive.

Donc, si vous voulez vous débarrasser du bruit de la console mais pas de vos propres journaux, vous pouvez essayer le bon vieux printf("")au lieu du NSLog car il n'est pas affecté par le OS_ACTIVITY_MODE=disable .

Mais mieux vaut vérifier la nouvelle os_logAPI ici .

Jakub Truhlář
la source
1

Cette solution a fonctionné pour moi:

  1. Exécutez l'application dans le simulateur
  2. Ouvrez le journal système ( + /)

Cela videra toutes les données de débogage ainsi que vos NSLogs.

Pour filtrer uniquement vos instructions NSLog:

  1. Préfixez chacun avec un symbole, par exemple: NSLog(@"^ Test Log")
  2. Filtrer les résultats en utilisant le champ de recherche en haut à droite, "^" dans le cas ci-dessus

Voici ce que vous devriez obtenir:

Capture d'écran de la console

psobko
la source