美文网首页
自定义log格式

自定义log格式

作者: 黄定师 | 来源:发表于2019-05-11 23:10 被阅读0次

前言

平时开发调试时,通常采用NSLog打印相关信息,但是系统默认不会打印这句log具体来自哪个位置。为了提高定位代码效率,我们经常在log里加上一些特殊标志符。如果系统能自动打印log的位置,不用我们自己特别处理,这样不仅能提高开发的效率,而且也能保持log格式的统一性。

自定义log格式

下面是几种自定义的log格式,输出log所在的文件名,方法名以及行数等信息。


#ifndef PrefixHeader_pch

#define PrefixHeader_pch

// Include any system framework and library headers here that should be included in all compilation units.

// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.

#ifdef __OBJC__


#if DEBUG

#define HLog(format, ...) fprintf(stderr,"[%s] %s:%d\t%s\n", __TIME__, [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:format, ##__VA_ARGS__] UTF8String])

#else

#define HLog(format, ...) nil

#endif


#ifdef DEBUG

#define DLog(format, ...) printf("[%s] %s [第%d行] %s\n", __TIME__, __FUNCTION__, __LINE__, [[NSString stringWithFormat:format, ## __VA_ARGS__] UTF8String])

#else

#define DLog(format, ...)

#endif


#if DEBUG

#define SLog(format, ...) NSLog(@"%s [第%d行] %@", __FUNCTION__, __LINE__,format, ##__VA_ARGS__)

#else

#define SLog(format, ...) nil

#endif


#endif

#endif /* PrefixHeader_pch */

简单介绍以下几个宏:

  1. VA_ARGS 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉,否则会编译出错;
  2. FILE 宏在预编译时会替换成当前的源文件名;
  3. LINE宏在预编译时会替换成当前的行号;
  4. FUNCTION宏在预编译时会替换成当前的函数名称。

log打印示例

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor whiteColor];
    
    HLog(@"我是HLog信息");
    
    DLog(@"我是DLog信息");
    
    SLog(@"我是SLog信息");
    
    NSLog(@"我是NSLog信息");
}

// 结果
[22:18:58] ViewController.m:30  我是HLog信息
[22:18:58] -[ViewController viewDidLoad] [第32行] 我是DLog信息
2019-05-11 22:19:07.130070+0800 FMDB[5218:589287] -[ViewController viewDidLoad] [第34行] 我是SLog信息
2019-05-11 22:19:07.130227+0800 FMDB[5218:589287] 我是NSLog信息

相关文章

  • wwdc2020 log

    引入 log 库 自定义log 类型,便于搜索,一般般包名和模块 public 格式化

  • 自定义log格式

    前言 平时开发调试时,通常采用NSLog打印相关信息,但是系统默认不会打印这句log具体来自哪个位置。为了提高定位...

  • iOS 自定义 log 格式

    写入代码测试 输出格式 YXCPerson init 22 : 初始化YXCPerson test 32 : 10...

  • Android开发工具类之LogUtils

    常用打印Log的工具集合格式化log输出,主tag,子tag,线程名,类及方法,文件及行数,最后是自定义的mess...

  • JsonLogger For Java

    slf4j4json Description 为slf4j提供自定义json格式的log输出 maven depe...

  • Retrofit使用Log拦截器在控制台输出Log

    一、使用自定义Log拦截器 1、创建自定义Log拦截器类 2、使用Log拦截器 二、使用okhttp官方Log拦截...

  • 自定义Log输出格式

    NSLog默认的输出格式是"日期-时间-项目名称-Debug字符串",例如2016-11-28 21:06:32....

  • Bro HTTP Log自定义格式

    添加自定字段,如human_readable time字段: FILE $bro/share/bro/base/p...

  • Swift自定义log以及其它

    一、自定义Log 在Swift中,我们也需要如OC一样,对log进行自定义。下面是一个我自定义的log,示例如下:...

  • Git log 日志

    git log 使用格式:git log [ ] [] [[\--] …​] 参...

网友评论

      本文标题:自定义log格式

      本文链接:https://www.haomeiwen.com/subject/dazfaqtx.html