iOS中打印日志显示系统详细时间,类名,行号及打印值

转载 2013年11月27日 17:02:06

Q:如何打印当前的函数和行号?

A:我们可以在打印时使用一些预编译宏作为打印参数,来打印当前的函数和行号。如:

1
NSLog(@"%s:%d obj=%@", __func__, __LINE__, obj);

其中__func__和__LINE__都是预编译的宏,编译时会分别替换为当前函数和当前行号。
下面是一些常用于打印日志的宏。

说明
__func__ 打印当前函数或方法,c字符串
__LINE__ 打印当前行号,整数
__FILE__ 打印当前文件路径,c字符串
__PRETTY_FUNCTION__ 打印当前函数或方法(在C++中会包含参数类型),c字符串

Q:如何打印一个类名,消息名,当前堆栈信息?

A:你可以使用以下方法在运行时动态获取这些信息。

代码 说明
NSStringFromSelector(SEL) 获取selector的名字
NSStringFromSelector(_cmd) 获取当前方法名
NSStringFromClass([object class]) 获取object的类名
NSThread callStackSymbols] 获取当前线程的栈,是一个NSArry,包含堆栈中所有函数名。

Q:如何将日志打印到一个文件

A:可以使用freopen函数重定向标准输出和标准出错文件。因为printf函数会向标准输出(stdout)打印,而NSLog函数会向标准出错(stderr)打印。重新定向标准输出(stdout)和标准出错(stderr)到一个文件将会使他们打印日志到一个文件中。

1
2
freopen("/tmp/log.txt", "a+", stdout);
freopen("/tmp/log.txt", "a+", stderr);

#define NSLog(FORMAT, ...) {\

                            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];\

                            [dateFormatter setDateStyle:NSDateFormatterMediumStyle];\

                            [dateFormatter setTimeStyle:NSDateFormatterShortStyle];\

                            [dateFormatter setDateFormat:@"HH:mm:ss:SSSSSS"]; \

                            NSString *str = [dateFormatter stringFromDate:[NSDate date]];\

                            [dateFormatter release];\

                            fprintf(stderr,"[--%s--]*[--%s--]*[--%s:%d--]\n",[str UTF8String], [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String],[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__);\

                            }


iOS中打印日志显示系统详细时间,类名,行号,函数名,线程,及打印值

Q:如何打印当前的函数和行号? A:我们可以在打印时使用一些预编译宏作为打印参数,来打印当前的函数和行号。如: NSLog(@"%s:%d obj=%@", __func__, __LINE__,...
  • HookyStudent
  • HookyStudent
  • 2015年01月21日 10:06
  • 469

iOS 打印日志显示系统详细时间,类名,行号及打印值

Q:如何打印当前的函数和行号? A:我们可以在打印时使用一些预编译宏作为打印参数,来打印当前的函数和行号。如: 1 NSLog(@"%s:%d...
  • hghjgbjhgadja
  • hghjgbjhgadja
  • 2016年01月08日 10:25
  • 258

log4j怎样配置才能打印出执行语句所在的类名及行号

0 15 如题  比如 03:23:53,937  INFO LoginAction.java:25 - select ...... Struts  ...
  • comphoner
  • comphoner
  • 2017年08月30日 00:27
  • 417

logback--配置(显示类名、方法名、代码行号问题)

logback日志配置了输出格式,但是日志输出中为“?.?(?)”,这位调试问题造成了很大的影响。...
  • qq853632587
  • qq853632587
  • 2017年10月13日 10:15
  • 597

Android 代码里 用log打印 该行的类名、文件名、方法名、行号等信息

// Log.d("5555555555555", "信息"+Tools.getMyStackTraceInfo(new Exception())); // Log.d("5555555555555"...
  • w6028819321
  • w6028819321
  • 2013年12月12日 11:52
  • 2024

logback配置显示类名、方法名和代码行号

概述 logback日志配置了输出格式,但是日志输出中为“?.?(?)”,这位调试问题造成了很大的影响。 配置 光有以下配置,还不行, 还需要添加“AsyncAppender”。AsyncApp...
  • heymysweetheart
  • heymysweetheart
  • 2017年03月07日 15:01
  • 4491

log4j打印出所在行号

%l - %m%n l  log发生位置的详细描述,包括方法名、文件名及行号。  %l 显示出文件名称和行号  (WalletServiceImpl.java:68)  文件名:行号...
  • mggwct
  • mggwct
  • 2016年06月12日 16:51
  • 597

Android显示Log信息(带行号,类名,方法名)

package com.dylan.testlog; import android.util.Log; public class MyLogger { // private static fina...
  • u010785585
  • u010785585
  • 2014年07月16日 16:42
  • 2242

log4j打印类路径,及行号

### set log levels ### log4j.rootLogger = info,stdout ### 输出到控制台 ### log4j.appender.stdout = ...
  • xieyuntestShow
  • xieyuntestShow
  • 2014年09月24日 16:56
  • 8059

Log4j2 类名与行名不显示问题

Log4j2 类名与行名不显示问题异步日志,打印到文件中,显示的类名和行数都是”?”: 修改成同步日志,就可以显示出类名与行数了:...
  • llwwlql
  • llwwlql
  • 2017年10月21日 15:20
  • 417
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS中打印日志显示系统详细时间,类名,行号及打印值
举报原因:
原因补充:

(最多只允许输入30个字)