2009-09-03 5 views
2

Lorsque j'utiliseComment se débarrasser de tous ces déchets dans NSLog?

NSLog(@"fooBar") 

il imprime beaucoup de choses que je ne veux pas:

2009-09-03 13:46:34.531 MyApp[3703:20b] fooBar 

Est-il possible d'imprimer quelque chose à la console sans ce grand préfixe? Je veux dessiner une table et d'autres choses dans la console pour que l'espace soit crucial ...

+1

duplication possible de [Dans XCode, existe-t-il un moyen de désactiver les horodatages qui apparaissent dans la console du débogueur?] (Http://stackoverflow.com/questions/1354728/in-xcode-is-there-a-way -to-disable-the-timestamps-that-appear-in-the-debugger-co) – bbum

Répondre

9

Ceci est de Mark Dalrymple à borkware.com

http://borkware.com/quickies/single?id=261

A Quieter NSLog (Général-> Hacks) [permalink]

// NSLog() writes out entirely too much stuff. Most of the time I'm 
// not interested in the program name, process ID, and current time 
// down to the subsecond level. 
// This takes an NSString with printf-style format, and outputs it. 
// regular old printf can't be used instead because it doesn't 
// support the '%@' format option. 

void QuietLog (NSString *format, ...) 
{ 
    va_list argList; 
    va_start (argList, format); 
    NSString *message = [[[NSString alloc] initWithFormat: format 
               arguments: argList] autorelease]; 
    printf ("%s", [message UTF8String]); 
    va_end (argList); 

} // QuietLog 
+0

S'il vous plaît corrigez-moi si je me trompe, mais: Puis-je vraiment écrire ...) à la fin de la définition de la fonction pour indiquer "combien plus args que vous le souhaitez" ??? –

+0

Vous pouvez. C'est valide C. Allez-y et essayez-le. – jrbj

+0

C'est probablement la solution la plus élégante, avec fprintf étant le plus rapide. Notez que si vous utilisez fprintf, vous devez vous assurer que tout ce qui s'y trouve est une chaîne C, mais QuietLog prendra exactement les mêmes arguments que NSLog. – Cinder6

-2

NSLog imprime juste à strerr. Utilisez fprintf à la place.

fprintf(stderr, "foobar"); 
+0

-1 Cette réponse est incomplète car printf et fprintf ne gèrent pas les chaînes Objective-C sans conversion. Au moment où un NSString est passé, le programme va planter. De plus, d'autres réponses permettent de changer l'emplacement de sortie en un seul endroit. –

+4

'NSLog()' ne s'imprime pas simplement sur 'stderr'. Il se connecte également au journal système à l'adresse 'ASL_LEVEL_WARNING' avec la fonction' com.apple.console'. Vous pouvez faire de même en utilisant les fonctions décrites dans la page de manuel 'asl (' 3') '. Cela dit, si vous dessinez une table ASCII, vous ne voudrez probablement pas * vous connecter au journal système. Il suffit d'écrire 'stdout' /' stderr' selon le cas. –

+0

Bogus réponse; fprintf ne peut pas traiter w/objets, comme indiqué précédemment. – bbum

2

Ceci est une variante de la quickies borkware: http://cocoaheads.byu.edu/wiki/a-different-nslog. Il imprime le fichier et le numéro de ligne de l'endroit où le journal a lieu. Je l'utilise tout le temps.

+0

En outre, puisque le demandeur essaie de "dessiner une table" avec la sortie de texte, notez que chaque appel à QuietLog() se termine par un retour à la ligne, tout comme NSLog(). Si vous devez imprimer une ligne de texte avec plusieurs instructions, je suggère d'utiliser 'printf()' et '- [NSString UTF8String]'. –

Questions connexes