【问题标题】:How to get rid of all this garbage in NSLog?如何摆脱 NSLog 中的所有这些垃圾?
【发布时间】:2010-11-25 09:15:30
【问题描述】:

当我使用时

NSLog(@"fooBar")

它会打印出很多我不想要的东西:

2009-09-03 13:46:34.531 MyApp[3703:20b] fooBar

有没有办法在没有这个大前缀的情况下将内容打印到控制台? 我想在控制台中画一张桌子和其他一些东西,这样空间就很重要了……

【问题讨论】:

标签: iphone objective-c cocoa cocoa-touch uikit


【解决方案1】:

NSLog 只是打印到 strerr。请改用 fprintf。

fprintf(stderr, "foobar");

【讨论】:

  • -1 这个答案不完整,因为 printf 和 fprintf 不处理没有转换的 Objective-C 字符串。 NSString 传入的那一刻,程序就会崩溃。另外,其他答案可以在一个地方更改输出位置。
  • NSLog() 不只是打印到stderr。它还使用com.apple.console 的设施记录到ASL_LEVEL_WARNING 的系统日志。您可以使用asl(3) 手册页中讨论的函数来执行相同的操作。也就是说,如果您正在绘制一个 ASCII 表,您可能真的不想想要记录到系统日志中。请酌情写信给stdout/stderr
  • 虚假答案;如前所述,fprintf 不能处理 w/objects。
【解决方案2】:

这是来自 borkware.com 的 Mark Dalrymple

http://borkware.com/quickies/single?id=261

更安静的 NSLog (General->Hacks) [永久链接]

// NSLog() writes out entirely too much stuff.  Most of the time I'm
// not interested in the program name, process ID, and current time
// down to the subsecond level.
// This takes an NSString with printf-style format, and outputs it.
// regular old printf can't be used instead because it doesn't
// support the '%@' format option.

void QuietLog (NSString *format, ...)
{
  va_list argList;
  va_start (argList, format);
  NSString *message = [[[NSString alloc] initWithFormat: format
                                              arguments: argList] autorelease];
  printf ("%s", [message UTF8String]);
  va_end  (argList);

} // QuietLog

【讨论】:

  • 如果我弄错了,请纠正我,但是:我真的可以在函数定义的末尾写...)以指示“您希望还有多少个参数”???跨度>
  • 你可以。是有效的 C。去试试吧。
  • 这可能是最优雅的解决方案,fprintf 是最快的。请注意,如果使用 fprintf,则必须确保进入其中的所有内容都是 C 字符串,但 QuietLog 将采用与 NSLog 完全相同的参数。
  • 这行得通...但是 printf("%s", ...) 效率低下。如果您将其称为一堆(最后发布消息),您可能希望避免自动释放。见:stackoverflow.com/questions/1354728/…
  • 如果你想让这个超级优雅,在这个方法中添加一个编译器标志,让你用一个开关关闭打印,这样你就不会在你的发布应用程序中填满一堆垃圾控制台消息。
【解决方案3】:

这是 borkware quickies 的一个变体:http://cocoaheads.byu.edu/wiki/a-different-nslog。它打印发生日志的文件和行号。我一直在用它。

【讨论】:

  • 另外,由于提问者试图用文本输出“绘制表格”,请注意每次调用 QuietLog() 都以换行符结束,就像 NSLog() 一样。如果需要打印一行包含多个语句的文本,我建议使用printf()-[NSString UTF8String]
猜你喜欢
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2017-01-25
相关资源
最近更新 更多