您的位置:首页 > 移动开发 > IOS开发

ios自定义NSLog的输出内容

2015-06-29 13:23 399 查看
本文章转发自:http://my.oschina.net/juwenz/blog/178781

问题

NSLog输出的信息很少,格式如下

Date Time OurApp[<processid>] NSLog output

数据可能像这样

20131111 12:35:35.025 TestApp[460:c07] Hello world

我们希望输出更多的内容,比如文件名,方法名,代码行数等,简单来说就像下面这种格式

(ClassName MethodName) (SourceFileName:LineNumber NSLog output

解决方法

步骤

新建一个类,命名为ExtendNSLogFunctionality;

打开ExtendNSLogFunctionality.h,加入下面代码

#ifdef DEBUG
#define NSLog(args...)  ExtendNSLog(__FILE__,__LINE__,__PRETTY_FUNCTION__,args);
#else
#define NSLog(x...)
#endif

void   ExtendNSLog(const char *file, int lineNumber, const char *functionName, NSString *format, ...);


  3.打开ExtendNSLogFunctionality.m , 加入下面代码

void ExtendNSLog(const char *file, int lineNumber, const char *functionName, NSString *format, ...)
{
// Type to hold information about variable arguments.
va_list ap;
// Initialize a variable argument list.
va_start (ap, format);
// NSLog only adds a newline to the end of the NSLog format if
// one is not already there.
// Here we are utilizing this feature of NSLog()
if (![format hasSuffix: @"\n"])
{
format = [format stringByAppendingString: @"\n"];
}
NSString *body = [[NSString alloc] initWithFormat:format arguments:ap];
// End using variable argument list.
va_end (ap);
NSString *fileName = [[NSString stringWithUTF8String:file] lastPathComponent];
fprintf(stderr, "(%s) (%s:%d) %s",
functionName, [fileName UTF8String],
lineNumber, [body UTF8String]);
}


4.把ExtendNSLogFunctionality.h 加入到Prefix.pch 的OBJCsection中

#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "ExtendNSLogFunctionality.h"
#endif


测试结果

在某个文件的某个方法中NSLog了一下,结果如下

(-[TestNSLogVC resetSize]) (TestNSLogVC.m:78) height : 460.000000 width:320.000000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: