J'utilise NSLOG dans mon application. Et j'aimerais vous débarrasser du début gênant de chaque chaîne: "2009-07-01 21: 11: 06.508 myApp [1191: 207]". P>
Y a-t-il un moyen de le faire? Probablement une autre fonction de journalisation? P>
Merci. P>
5 Réponses :
Vous pouvez imprimer à SDTERR:
fprintf(stderr, "%s", "Your message");
Cela nécessite (convertir à) une chaîne C et une chaîne de format avec% @ dans celle-ci ne fonctionnera pas. Ce n'est pas une mauvaise idée, mais l'utilisation directe n'est pas un remplaçant de rentabilité pour NSLog ().
True, vous devriez l'envelopper dans une fonction avec Varargs. J'en utilise un de karl kraft karlkraft.com/index.php/2009 / 03/33 / 114
J'aime l'interrupteur marche / arrêt de débogage dans son approche, mais il ne peut pas %% s'échappe (certes rare, mais problématique quand ils se produisent).
Lire ceci: p>
C'est un projet GITUB appelé "silencieux", originaire de notre site Cocoahads, qui explique comment créer une fonction silestlog code> qui fait ce que vous décrivez. Il montre également comment envelopper la silhémoche dans une macro appelée locationLog de manière à imprimer le nom de fichier et le numéro de ligne où vous avez la relève journal. Je l'utilise dans tous mes projets et je ne perds plus les déclarations "NSLog" errantes. P>
+1 Dang, j'étais sur le point de poster la même chose. Je a écrit i> cette page wiki ... ;-)
Et vous l'avez eu de la Quickies de Borkware, de sorte que tout s'ouvre. ;)
J'aime pouvoir utiliser des objets de l'objectif-C pour les chaînes de format et les arguments, donc j'ai ré-écrit nslog () et l'a ajouté à mes utilitaires.
+ (void)myLog:(NSString *)formatString, ... { va_list args; va_start(args, formatString); NSString* output = [[NSString alloc] initWithFormat:formatString arguments:args]; fprintf(stderr, "%s\n", [output UTF8String]); [output release]; va_end(args); }
Si vous lisez le lien Dave liée à, vous verriez que c'est ce que nous faisons, sauf que nous gérons également %% entités dans la chaîne de format.
Quinn, je n'ai pas vu ce post qu'après avoir posté ma réponse. Aussi, il y a quelque chose à dire pour avoir la réponse à l'avant et ne pas avoir à suivre un lien externe.
Pas de soucis. (Donc, vous vous direz généralement quand d'autres réponses ont été publiées, mais le chevauchement est tout à fait normal.) Vous avez raison, parfois, c'est bien d'avoir le code dans la réponse. Cependant, une fois qu'il passe une certaine taille, ou dans ce cas où la page Wiki est susceptible de changer (qu'elle a depuis la poste de Dave), il peut être préférable de lier.
Notez également qu'il s'agit d'une approche légèrement différente en créant une méthode de classe (qui est appelée sur cette classe) plutôt qu'une fonction C comme NSLog () pouvant être utilisée n'importe où. Cela dépend simplement de ce que l'Asseer préférerait et la portée de l'utilisation.
Avez-vous essayé Cfshow () ? P>
(Ajout de lien vers Docs) Je n'étais pas au courant de cette fonction, bon de savoir. Cependant, ce n'est pas un remplacement d'une chute, car vous devriez avoir une nstring * à lancer comme cfstringref. Néanmoins, on pourrait facilement définir une macro ou une masse pour envelopper cfshow () ...
Malheureusement, cfshow a un comportement très étrange dans Leopard qu'il enveloppe de manière erronée des lignes de manière illisible. Pour le léopard, c'est certainement préférable d'éviter que cfshow complètement.
Cette macro de préprocesseur est facile à mettre en œuvre et vous n'avez pas à modifier l'un de vos instructions actuelles Ça fonctionne complètement comme i original a trouvé cela sur une autre question, mais je ne peux pas le trouver maintenant. P> P> nslog code> nslog:
Nslog code> sans toutes les choses supplémentaires avant le message. P>