自定义NSLog的输出内容

向牛人致敬:http://mobile.tutsplus.com/tutorials/iphone/customize-nslog-for-easier-debugging/

问题

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 , 加入下面代码

    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
    

至于什么文件 什么方法嘛,看了输出你就知道了 O(∩_∩)O~

你可能感兴趣的:(自定义NSLog的输出内容)