用以替换系统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 = ; \
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的更多相关文章

  1. 替换系统数据库解决SQLSERVER服务启动不了的问题

    替换系统数据库解决SQLSERVER服务启动不了的问题 当遇到SQLSERVER服务启动不起来的时候,我们试过把系统的四个数据库master ,model ,tempdb,msdb 替换掉,Windo ...

  2. android使用mount挂载/system/app为读写权限,删除或替换系统应用

    注意:以下代码中#开头的则为需要执行的shell命令,其他的为打印的结果.#代表需要使用ROOT权限(su)执行,所以想要修改您android手机某个目录挂载为读写,首先需要有ROOT权限! 先要得到 ...

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

    自定义UITabBar替换系统默认的,目的是为了在UITabBar中间位置添加一个“+号按钮”,下面我们来聊聊具体的实现. 1.自定义WBTabBar,让其继承自UITabBar,代码如下: // / ...

  4. 介绍一种很棒的wince 如何替换系统声音的方法

    Topic:介绍一种很棒的wince 如何替换系统声音的方法(作者:Baiduluckyboy) //------------------------------------------------- ...

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

    本文转载自:http://blog.csdn.net/kris_fei/article/details/55100299 Platform: RK3288OS: Android 6.0Kernel: ...

  6. Android RatingBar自定义替换系统图片

    1.自定义替换提醒☆图片,准备两个图片添加到系统中去:如下:        在drewable下定义一个图片资源ratingbar_drawable.xml 1 2 3 4 5 6 7 8 9 10 ...

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

    更新 hosts 下面介绍的操作均可能覆盖现有 hosts ,进行操作前请先确认是否需要备份. 推荐使用本项目的 Host Tools 来自动化 备份/配置 工作. 若更新 hosts 未立即生效,请 ...

  8. ExpandableListView(一)替换系统默认的箭头

    很多朋友可能在android开发中,用过ExpandableListView这个组件,这个组件功能强大,比传统的ListView有好多优势.然而在开发中,我相信有好多人,包括我个人都会遇到下面的一些问 ...

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

    一.关于emoji表情 随着iOS系统版本的升级,对原生emoji表情的支持也越来越丰富.emoji表情是unicode码中为表情符号设计的一组编码,当然,还有独立于unicode的另一套编码SBUn ...

随机推荐

  1. mysql 导出数据到csv文件的命令

    1.导出本地数据库数据到本地文件 mysql -A service_db -h your_host -utest -ptest mysql> select * from t_apps where ...

  2. Leetcode 647. Palindromic Substrings

    Given a string, your task is to count how many palindromic substrings in this string. The substrings ...

  3. ADB故障时的一些命令

    开发中经常用到adb重启等操作,简单记录一下. 1.重启 adb kill-server adb start-server 2.显示版本号 adb version 3.显示已连接的设备 adb dev ...

  4. 初学者使用MySQL_Workbench 6.0CE创建数据库和表,以及在表中插入数据。

    标签: mysqlworkbench数据库 2013-10-09 20:17 19225人阅读 评论(14) 收藏 举报  分类: mysql(1)  版权声明:本文为博主原创文章,未经博主允许不得转 ...

  5. javascript加上标签

    在javascript脚本中可以加上标签,方便javascript程序进行快速定位,标签一般由一个合法的字符名称加上一个冒号组成,标签可以放在任意行的位置,这样可以为该行设置一个标记,然后再 结构体中 ...

  6. T-sql 编程

    ---------------------------T-SQL编程--------------------------1.声明变量--declare @name nvarchar(50)--decl ...

  7. .net core 2.2 部署CentOS7(1)安装虚拟机

    目录: .net core 2.2 部署CentOS7(1)安装虚拟机 .net core 2.2 部署CentOS7(2)给虚拟机安装CentOS7 .net core 2.2 部署CentOS7( ...

  8. Java虚拟机_运行时数据区

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域. 这些区域都有各自的用途.各自的创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程启动 ...

  9. npm saveError ENOENT: no such file or directory

    1.报错情况 在执行npm install xxx时,出现如下:npm WARN saveError ENOENT: no such file or directory, open '/nodetes ...

  10. 聊聊MyBatis缓存机制【美团-推荐】

    聊聊MyBatis缓存机制 2018年01月19日 作者: 凯伦 文章链接 18778字 38分钟阅读 前言 MyBatis是常见的Java数据库访问层框架.在日常工作中,开发人员多数情况下是使用My ...