首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在内存结构中捕获NSLog输出

在内存结构中捕获NSLog输出
EN

Stack Overflow用户
提问于 2017-02-08 23:24:35
回答 2查看 673关注 0票数 2

我正在寻找一种方法来捕获NSLog输出中的NSArray或任何其他内存结构,同时保持控制台日志完整。我正在创建一个工具,可以根据请求向服务器发送最新X日志行的副本。到目前为止,我排除了以下几种选择:

  • 我不能按照建议的NSLog将here重定向到文件,因为这也会从控制台中删除所有日志消息。
  • 我尝试使用另一个自定义函数对NSLog进行swizzling,但是我很难找到与类方法相反的C函数。
  • 将NSLog封装在我自己的CustomLog函数中是可能的,但我宁愿将它作为最后的手段。这个项目很大,需要更换的电话太多了。我也害怕失去来自库的控制台输出,在那里很难添加我的CustomLog。

我一直在寻找一种方法来拦截NSLog输出,或者在控制台中打印日志之后捕获日志,但是我找不到任何起作用的东西。有什么建议吗?

更新:我最终重新思考了这个方法,我用自己的日志方法替换了通过代码进行的所有日志调用。这是额外的工作,但灵活性,以改变实现细节最终支付。

EN

回答 2

Stack Overflow用户

发布于 2017-02-09 02:42:37

您可以将日志重定向到documents目录中的console.log,就像链接How to redirect the nslog output to file instead of console中提到的那样。

当您希望将日志发送到服务器时,可以从文档目录中的console.log读取日志并将其发送到服务器。

另一个不太好的解决方案是像这样重新定义NSLog:

代码语言:javascript
复制
void myLoggingFunction(NSString *format, ...)
{

    va_list args;
    va_start(args, format);

    // Do my stuff with log
    NSLog(@"Sample log: Doing my stuff");

    NSLog(format, args);

    va_end(args);
}
#define NSLog myLoggingFunction

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSLog(@"Test Log output");

}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end

上面的代码输出是:

2017-02-09 14:39:18.619 Logging_objc91206:3161193样本日志:做我的东西2017-02-09 14:39:18.620 Logging_objc91206:3161193测试日志输出

票数 1
EN

Stack Overflow用户

发布于 2017-02-09 00:54:39

难以置信的困难。

但是,我的代码中没有一个NSLog调用--使用日志库,或者只定义一些宏,这些宏将执行您希望它们做的事情,要么调用NSLog,要么做其他事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42125504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档