用以替换系统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
}

以下是配置的地方:

时间: 2024-10-02 00:45:03

用以替换系统NSLog的YouXianMingLog的相关文章

仿新浪微博IOS客户端(v5.2.8)——自定义UITabBar替换系统默认的(添加“+”号按钮)

转载请标明出处:http://blog.csdn.net/android_ls/article/details/45896395 声明:仿新浪微博项目,所用所有图片资源都来源于官方新浪微博IOS客户端,编写本应用的目的在于学习交流,如涉及侵权请告知,我会及时换掉用到的相关图片. 自定义UITabBar替换系统默认的,目的是为了在UITabBar中间位置添加一个"+号按钮",下面我们来聊聊具体的实现. 1.自定义WBTabBar,让其继承自UITabBar,代码如下: // // WBT

更新/替换系统 hosts,轻松访问国外站点

更新/替换系统 hosts,轻松访问国外站点 更新 hosts 下面介绍的操作均可能覆盖现有 hosts ,进行操作前请先确认是否需要备份. 推荐使用本项目的 Host Tools 来自动化 备份/配置 工作. 若更新 hosts 未立即生效,请重置网络: 在系统设置内开关网络 启用禁用飞行模式 重启系统 Windows 用文本编辑器(如 Notepad++)打开文件: C:\Windows\System32\drivers\etc\hosts 将 hosts 全部内容复制到上述文件内并保存 注

iOS之自定义UITabBar替换系统默认的(添加“+”号按钮)

自定义UITabBar替换系统默认的,目的是为了在UITabBar中间位置添加一个“+号按钮”,下面我们来聊聊具体的实现. 1.自定义WBTabBar,让其继承自UITabBar,代码如下: // // WBTabBar.h // SinaWeibo // // Created by android_ls on 15/5/21. // Copyright (c) 2015年 android_ls. All rights reserved. // #import <UIKit/UIKit.h>

【OSX】OSX下采用MAMP的PHP替换系统自带PHP

OSX下采用MAMP的PHP替换系统自带PHP 前言 众所周知,OSX自带了PHP和Apache,显然这些不是我们需要的. 很多人都会安装集成环境作为自己的开发环境.比如我选择的是MAMP,PHP的版本是7.0. 问题 我在OSX的终端中,执行php -v,出现的是自带的PHP5.5 [email protected] ~ $ php -v PHP 5.5.31 (cli) (built: Feb 20 2016 20:33:10) Copyright (c) 1997-2015 The PHP

JS替换系统默认对话框,仿IOS风格

Alert alert("这个是一个alert弹窗"); Alert 自定义参数 alert({ content: "自定义alert弹窗", btnText: "OK", boxClass: "custom-alert" }, function () { console.log("good!"); }); Confirm confirm("这个是一个confirm弹窗", functi

Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令,

Linux系统的rm命令太危险,一不小心就会删除系统文件.写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时都要做一个备份,然后再删除. 假设有一个大的分区/data/,每次删除文件或者目录前,都要在/data/下面创建一个隐藏目录,以日期/时间命名,比如/data/.201802021054,然后把所有删除的文件同步到该目录下面,可以使用rsync -R把文件路径一同同步 答案: #!/bin/bash d=`date +%Y%m%d%H%M` read -p "Are y

[RK3288][Android6.0] 调试笔记 --- 替换系统签名【转】

本文转载自:http://blog.csdn.net/kris_fei/article/details/55100299 Platform: RK3288OS: Android 6.0Kernel: 3.10.92 由于项目的apk安装需要shareid为system的权限(不需要高权限的apk是可以正常安装的),一开始我用的是releasekey,导致签名文件不匹配无法安装,因此就替换系统默认platform签名文件. 生成新的签名文件方法参考rk3288/build/target/produ

Android RatingBar自定义替换系统图片

1.自定义替换提醒☆图片,准备两个图片添加到系统中去:如下:        在drewable下定义一个图片资源ratingbar_drawable.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res

自定制emoji替换系统的emoji键盘

一.关于emoji表情 随着iOS系统版本的升级,对原生emoji表情的支持也越来越丰富.emoji表情是unicode码中为表情符号设计的一组编码,当然,还有独立于unicode的另一套编码SBUnicode,在OS系统中,这两种编码都有很好的支持.UI系统会自动帮我们将编码转义成表情符号,例如用SBUnicode如下代码: UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];    l