NSLogger,如何在日志中显示Log调用者的实例信息

时间:2014-05-11 09:51:28

标签: ios logging

我在iOS应用中使用NSLoger,它很棒,它可以显示函数名,文件行,我只想显示类信息的实例。

例如:A类方法是' doAction',实例:A * a = [A alloc];

  in method 'doAction':
  {
        NSLog(@"out this instance information, do not need repeat set the argument [%@]",self );
  }

我的意思是我不需要定义格式和' self'每个NSLog语句中的参数....

怎么做?我可以清楚解释一下,需要你的帮助谢谢。

所以...然后我尝试添加一些代码如下:

 void LogMessageMe( const char *filename, int lineNumber, const char *functionName,id  target, int level, NSString *format, ...)
{
    NSString* strTarget = [target description];

    va_list args;
    va_start(args, format);

    LogMessageTo_internal(NULL,  filename, lineNumber,  functionName, strTarget, level, format, args);
    va_end(args);
}

#define NSLogMe(...)                      LogMessageMe( __FILE__, __LINE__, __FUNCTION__, self, 0, __VA_ARGS__)

呼叫代码如下:

 NSLogMe(@"didFinishLaunchingWithOptions");

然后输出日志:

  <AppDelegate: 0x906e100> | Main thread | didFinishLaunchingWithOptions

这就是我想要看到的......因为在应用程序中,许多实例都是创建但是同一个类...如果没有标识号,则很难跟踪目标实例....

但仍然是一个问题...

IDE报告有关该语句的警告消息:

NSLogMe(@"didFinishLaunchingWithOptions");

&#34;函数'LogMessageMe'的隐式声明在C99&#34;

中无效 这似乎是小问题......有人帮忙吗?感谢。

2 个答案:

答案 0 :(得分:0)

使用NSLog语句中的%p说明符输出指针的值:

NSLogMe(@"Called from %@ instance %p", [self class], self);

这些是标准的[NSString stringWithFormat:...]说明符。有关完整列表,请参阅string format specifiers的文档。

答案 1 :(得分:0)

警告与NSLogger无关。

您需要在功能签名NSLogMe可见的位置定义宏LogMessageMe

如果您在LogMessageMe之外声明LoggerClient,那么您需要公开LogMessageTo_internal(现在它不是,正如其名称所示)。