码迷,mamicode.com
首页 > 其他好文 > 详细

用以替换系统NSLog的YouXianMingLog

时间:2015-01-03 10:37:38      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

用以替换系统NSLog的YouXianMingLog

技术分享

这是本人自己使用并改良的用以替换系统NSLog的类,非常好用,以下是使用示例,现在开源出来并提供源码,好用的话顶一下吧^_^

效果:

技术分享

YouXianMingLog.h 与 YouXianMingLog.m

//
//  YouXianMingLog.h
//
//  http://home.cnblogs.com/u/YouXianMing/
//  https://github.com/YouXianMing
//
//  Created by YouXianMing on 15/1/3.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

#define ON   1
#define OFF  0

///////////////   CONFIG   /////////////////

#define NO_LOG          OFF   // 禁用Log
#define SWITCH_LOG      ON    // 切换打印

#define TIME_STAMP      OFF   // 时间戳
#define FILE_NAME       OFF   // 文件名

////////////////////////////////////////////

#if SWITCH_LOG
#if NO_LOG
#define NSLog(args...)
#else
#define NSLog(args...) ExtendNSLog(__FILE__,__LINE__,__PRETTY_FUNCTION__,args);
#endif
#endif

void ExtendNSLog(const char *file, int lineNumber, const char *functionName, NSString *format, ...);
//
//  YouXianMingLog.m
//
//  http://home.cnblogs.com/u/YouXianMing/
//  https://github.com/YouXianMing
//
//  Created by YouXianMing on 15/1/3.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "YouXianMingLog.h"

#ifndef GCDExecOnce
#define GCDExecOnce(block) \
{ static dispatch_once_t predicate = 0; dispatch_once(&predicate, block); }
#endif

#define DMDEBUG_DEFAULT_DATEFORMAT @"HH:mm:ss.SSS"

static NSDateFormatter* _DMLogDateFormatter = nil;

void ExtendNSLog(const char *file, int lineNumber, const char *functionName, NSString *format, ...)
{
    // 获取时间格式
    GCDExecOnce(^{
        _DMLogDateFormatter = [[NSDateFormatter alloc] init];
        [_DMLogDateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
        [_DMLogDateFormatter setDateFormat:DMDEBUG_DEFAULT_DATEFORMAT];
    });
    
#if TIME_STAMP
    // 获取当前时间戳
    const char *nowCString = [[_DMLogDateFormatter stringFromDate:[NSDate date]] cStringUsingEncoding:NSUTF8StringEncoding];
    
    // 处理format
    va_list ap;
    va_start (ap, format);
    if (![format hasSuffix: @"\n"]) {
        format = [format stringByAppendingString: @"\n"];
    }
    NSString *body = [[NSString alloc] initWithFormat:format arguments:ap];
    va_end (ap);
    
#if FILE_NAME
    // 获取一些参数
    NSString *fileName = [[NSString stringWithUTF8String:file] lastPathComponent];
    
    // 打印
    fprintf(stderr, "%s %s:%d %s", nowCString, [fileName UTF8String], lineNumber, [body UTF8String]);
#else
    fprintf(stderr, "%s %s", nowCString, [body UTF8String]);
#endif
    
#else
    // 处理format
    va_list ap;
    va_start (ap, format);
    if (![format hasSuffix: @"\n"]) {
        format = [format stringByAppendingString: @"\n"];
    }
    
    NSString *body = [[NSString alloc] initWithFormat:format arguments:ap];
    va_end (ap);
    

    
#if FILE_NAME
    // 获取一些参数
    NSString *fileName = [[NSString stringWithUTF8String:file] lastPathComponent];
    
    // 打印
    fprintf(stderr, "%s:%d %s", [fileName UTF8String], lineNumber, [body UTF8String]);
#else 
    fprintf(stderr, "%s", [body UTF8String]);
#endif
    
#endif
}

以下是配置的地方:

技术分享

 

用以替换系统NSLog的YouXianMingLog

标签:

原文地址:http://www.cnblogs.com/YouXianMing/p/4199172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!