用以替换系统NSLog的YouXianMingLog

简介:

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

以下是配置的地方:

目录
相关文章
|
3月前
|
自然语言处理 IDE 开发工具
Xcode 26 beta (17A5241e) 发布 - Apple 平台 IDE
Xcode 26 beta (17A5241e) 发布 - Apple 平台 IDE
221 0
Xcode 26 beta (17A5241e) 发布 - Apple 平台 IDE
|
网络协议 Unix API
iOS - Socket 网络套接字
1、Socket 套接字 所谓 Socket,通常称为 “套接字”,网络应用程序通过套接字向网络发送请求或者应答网络请求。Socket 通常用于描述 IP 地址和端口,是应⽤层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口,是一个通信链的句柄,可以用来实现不同虚拟机或者不同计算机之间的通信。
2083 0
|
8月前
|
存储 算法 区块链
区块链:版权保护的新利器
区块链:版权保护的新利器
571 21
|
8月前
|
人工智能 算法 API
构建基于 Elasticsearch 的企业级 AI 搜索应用
本文介绍了基于Elasticsearch构建企业级AI搜索应用的方案,重点讲解了RAG(检索增强生成)架构的实现。通过阿里云上的Elasticsearch AI搜索平台,简化了知识库文档抽取、文本切片等复杂流程,并结合稠密和稀疏向量的混合搜索技术,提升了召回和排序的准确性。此外,还探讨了Elastic的向量数据库优化措施及推理API的应用,展示了如何在云端高效实现精准的搜索与推理服务。未来将拓展至多模态数据和知识图谱,进一步提升RAG效果。
317 1
|
10月前
|
存储 机器学习/深度学习 大数据
量子计算与大数据:处理海量信息的新方法
量子计算作为革命性的计算范式,凭借量子比特和量子门的独特优势,展现出在大数据处理中的巨大潜力。本文探讨了量子计算的基本原理、在大数据处理中的应用及面临的挑战与前景,展望了其在金融、医疗和物流等领域的广泛应用。
|
机器学习/深度学习 边缘计算 运维
运维自动化的演变之路
【8月更文挑战第11天】在数字化时代的浪潮中,运维自动化技术不断演进,从最初的脚本编写到如今的智能化管理。本文将探讨运维自动化技术的发展历程、面临的挑战以及未来的发展方向,旨在为读者提供一个全面的视角来理解这一领域的变化。
162 0
|
Shell iOS开发 MacOS
mac安装Npm
mac安装Npm
|
安全 编译器 Swift
一文玩转 Swift 中的 Actors,看看他是如何避免数据竞争的?
一文玩转 Swift 中的 Actors,看看他是如何避免数据竞争的?
263 0
|
JSON 移动开发 数据格式
iOS url传递JSON格式参数方法
iOS url传递JSON格式参数方法
409 0
|
Android开发 数据安全/隐私保护 iOS开发
一日一技 | 只需两步,把你的电脑变成局域网文件共享中心
一日一技 | 只需两步,把你的电脑变成局域网文件共享中心
709 0