ios自定义NSLog的输出内容

本文章转发自: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

解决方法

步骤

  1. 新建一个类,命名为ExtendNSLogFunctionality;

  2. 打开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 , 加入下面代码

 1 void ExtendNSLog(const char *file, int lineNumber, const char *functionName, NSString *format, ...)
 2 {
 3     // Type to hold information about variable arguments.
 4     va_list ap;
 5     // Initialize a variable argument list.
 6     va_start (ap, format);
 7     // NSLog only adds a newline to the end of the NSLog format if
 8     // one is not already there.
 9     // Here we are utilizing this feature of NSLog()
10     if (![format hasSuffix: @"\n"])
11     {
12         format = [format stringByAppendingString: @"\n"];
13     }
14     NSString *body = [[NSString alloc] initWithFormat:format arguments:ap];
15 // End using variable argument list.
16     va_end (ap);
17     NSString *fileName = [[NSString stringWithUTF8String:file] lastPathComponent];
18     fprintf(stderr, "(%s) (%s:%d) %s",
19             functionName, [fileName UTF8String],
20             lineNumber, [body UTF8String]);
21 }

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

1 #ifdef __OBJC__
2 #import <UIKit/UIKit.h>
3 #import <Foundation/Foundation.h>
4 #import "ExtendNSLogFunctionality.h"
5 #endif

测试结果

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

(-[TestNSLogVC resetSize]) (TestNSLogVC.m:78) height : 460.000000 width:320.000000

 

posted on 2015-06-29 13:23  彪biao  阅读(473)  评论(0)    收藏  举报

导航