Depuis quelque temps, j'utilise un site de macros adopté à partir de plusieurs ci-dessus. Mine se concentre sur la journalisation dans la console, en mettant l'accent sur la verbosité contrôlée et filtrée ; si cela ne vous dérange pas beaucoup de lignes de journal mais que vous souhaitez facilement activer et désactiver des lots, alors vous pourriez trouver cela utile.
Tout d'abord, je remplace éventuellement NSLog par printf comme décrit par @Rodrigo ci-dessus
#define NSLOG_DROPCHAFF//comment out to get usual date/time ,etc:2011-11-03 13:43:55.632 myApp[3739:207] Hello Word
#ifdef NSLOG_DROPCHAFF
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#endif
Ensuite, j'active ou désactive la connexion.
#ifdef DEBUG
#define LOG_CATEGORY_DETAIL// comment out to turn all conditional logging off while keeping other DEBUG features
#endif
Dans le bloc principal, définissez différentes catégories correspondant aux modules de votre application. Définissez également un niveau de journalisation au- dessus duquel les appels de journalisation ne seront pas appelés. Ensuite , définir différentes saveurs de sortie NSLog
#ifdef LOG_CATEGORY_DETAIL
//define the categories using bitwise leftshift operators
#define kLogGCD (1<<0)
#define kLogCoreCreate (1<<1)
#define kLogModel (1<<2)
#define kLogVC (1<<3)
#define kLogFile (1<<4)
//etc
//add the categories that should be logged...
#define kLOGIFcategory kLogModel+kLogVC+kLogCoreCreate
//...and the maximum detailLevel to report (use -1 to override the category switch)
#define kLOGIFdetailLTEQ 4
// output looks like this:"-[AppDelegate myMethod] log string..."
# define myLog(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%s " format), __PRETTY_FUNCTION__, ##__VA_ARGS__);}
// output also shows line number:"-[AppDelegate myMethod][l17] log string..."
# define myLogLine(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%s[l%i] " format), __PRETTY_FUNCTION__,__LINE__ ,##__VA_ARGS__);}
// output very simple:" log string..."
# define myLogSimple(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"" format), ##__VA_ARGS__);}
//as myLog but only shows method name: "myMethod: log string..."
// (Doesn't work in C-functions)
# define myLog_cmd(category,detailLevel,format,...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%@: " format), NSStringFromSelector(_cmd), ##__VA_ARGS__);}
//as myLogLine but only shows method name: "myMethod>l17: log string..."
# define myLog_cmdLine(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%@>l%i: " format), NSStringFromSelector(_cmd),__LINE__ , ##__VA_ARGS__);}
//or define your own...
// # define myLogEAGLcontext(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%s>l%i (ctx:%@)" format), __PRETTY_FUNCTION__,__LINE__ ,[EAGLContext currentContext], ##__VA_ARGS__);}
#else
# define myLog_cmd(...)
# define myLog_cmdLine(...)
# define myLog(...)
# define myLogLine(...)
# define myLogSimple(...)
//# define myLogEAGLcontext(...)
#endif
Ainsi, avec les paramètres actuels de kLOGIFcategory et kLOGIFdetailLTEQ, un appel comme
myLogLine(kLogVC, 2, @"%@",self);
imprimera mais ce ne sera pas
myLogLine(kLogGCD, 2, @"%@",self);//GCD not being printed
ni
myLogLine(kLogGCD, 12, @"%@",self);//level too high
Si vous souhaitez remplacer les paramètres d'un appel de journal individuel, utilisez un niveau négatif:
myLogLine(kLogGCD, -2, @"%@",self);//now printed even tho' GCD category not active.
Je trouve que les quelques caractères supplémentaires de chaque ligne valent autant que je peux
- Activer ou désactiver une catégorie entière de commentaires (par exemple, signalez uniquement les appels marqués Modèle)
- signaler les détails avec des numéros de niveau supérieur ou simplement les appels les plus importants marqués de numéros inférieurs
Je suis sûr que beaucoup trouveront cela un peu exagéré, mais juste au cas où quelqu'un le trouverait adapté à leurs besoins ..