我正在寻找一种方法来捕获NSLog输出中的NSArray或任何其他内存结构,同时保持控制台日志完整。我正在创建一个工具,可以根据请求向服务器发送最新X日志行的副本。到目前为止,我排除了以下几种选择:
我一直在寻找一种方法来拦截NSLog输出,或者在控制台中打印日志之后捕获日志,但是我找不到任何起作用的东西。有什么建议吗?
更新:我最终重新思考了这个方法,我用自己的日志方法替换了通过代码进行的所有日志调用。这是额外的工作,但灵活性,以改变实现细节最终支付。
发布于 2017-02-09 02:42:37
您可以将日志重定向到documents目录中的console.log,就像链接How to redirect the nslog output to file instead of console中提到的那样。
当您希望将日志发送到服务器时,可以从文档目录中的console.log读取日志并将其发送到服务器。
另一个不太好的解决方案是像这样重新定义NSLog:
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测试日志输出
发布于 2017-02-09 00:54:39
难以置信的困难。
但是,我的代码中没有一个NSLog调用--使用日志库,或者只定义一些宏,这些宏将执行您希望它们做的事情,要么调用NSLog,要么做其他事情。
https://stackoverflow.com/questions/42125504
复制相似问题