| Index | Submit class | Submit snippet | Submission feed | List |

Snippet #59

Language: Objective-C, Author:
License: Public domain

Leopard sends all NSlog() to syslog - what a pain in the debugger! This is similar to snippet ZNLog but my implementation is invoked with a preprocessor macro and the log line has a time of day stamp and file path reduced to just the file name.

I presume this should work in all versions of Mac OS X but I've only used it with Leopard. You need no declaration to call the function unless your use is in the same file it is and appears earlier.

No copyright; do what you want with it.

// Macro to replace NSLog calls so lines go to Leopard's XCode debug console. Leopard's NSLog always copies to syslog!
#define NSLOG(...) (void)ZZMyLog(__FILE__, __LINE__, __PRETTY_FUNCTION__, [[NSString stringWithFormat:__VA_ARGS__] UTF8String])


// Place the following code about anywhere, even in main.c
#import <sys/time.h>

// Supports NSLOG macro to avoid sending Leopard lines to syslog. This global function can be called from anywhere.
void ZZMyLog(char *fileStr, int lineInt, char *funcStr, char *formatedStr)
{
  // fileStr: "/Users/dave/Desktop/CID/CIDHost.m"
  // funcStr: "-[CIDHost awakeFromNib]:"
  // formatedStr:  post formated string from MYLOG macro
  
  // strip file name path
  char * modname = strrchr(fileStr, '/');
  if (modname==NULL)
    modname = fileStr;
  else
    modname++;

  struct timeval theTime;
  struct timezone theZone;
  
  gettimeofday(&theTime, &theZone);
  
  time_t seconds = theTime.tv_sec;    // seconds since 1/1/1970
  seconds -= theZone.tz_minuteswest*60;  // time zone adjustment
  if (theZone.tz_dsttime) seconds += 60*60;  // add daylight savings time
  seconds %= (60*60*24);          // seconds in today
  int hours = seconds/(60*60); // hours in day
  int minutes = seconds/60 - hours*60; // minute in hour
  seconds %= 60;  // seconds in minute
  int millis = theTime.tv_usec;
  millis /= 1000;  // milliseconds
  
  printf("%02d:%02d:%02d.%03d %s:%03i %s: %s\n", hours, minutes, (int)seconds, millis, modname, lineInt, funcStr, formatedStr);
}

Compatible with:


Comments

Name

Website

Do you hate spammers? (Answer "Yes")