Ara*_*ion 15 macos logging cocoa objective-c
我试图找到一个用ObjC编写的Cocoa应用程序的日志框架.
到目前为止我的尝试:
我可以使用哪种日志框架设置以方便的方式通过该框架记录所有消息,以便在应用程序出现问题时,开发人员可以获取日志文件,并找出问题所在?
我不想简单地重定向stderr,我希望有一个包含所有日志的结构化日志输出.我不希望某些日志转到标准输出,我不希望任何日志发送到syslogd,我只想将所有日志写入单个文件,可靠地识别有关该日志消息的所有相关信息(例如线程ID,消息,调用记录器的函数,等等,格式易于查看和可视化.
我想要的是将所有当前日志重定向到新目标.
有没有人有什么建议?
编辑:
实际上,我想用ObjC术语做的是:
您可以使用Foundation函数NSSetUncaughtExceptionHandler设置一个回调函数,该函数将处理所有未捕获的异常:
void CustomLogger(NSString *format, ...) {
//do other awesome logging stuff here...
}
void uncaughtExceptionHandler(NSException *exception) {
//do something useful, like this:
CustomLogger(@"%@", [exception reason]);
}
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
Run Code Online (Sandbox Code Playgroud)
对于NSLog,您可以使用宏来覆盖它:)
#define NSLog(...) CustomLogger(__VA_ARGS__);
Run Code Online (Sandbox Code Playgroud)
您可以将标准错误输出重定向到文件.以下是将控制台输出重定向到应用程序的Documents文件夹中的文件的方法.当您想要在开发工作室之外测试应用程序时,这非常有用,可以从Mac上拔下.
-(void) redirectNSLogToDocuments {
NSArray *allPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [allPaths objectAtIndex:0];
NSString *pathForLog = [documentsDirectory stringByAppendingPathComponent:@"yourFile.txt"];
freopen([pathForLog cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}
Run Code Online (Sandbox Code Playgroud)
执行此方法后,NSLog生成的所有输出都将转发到指定的文件.要使您保存的文件打开管理器,浏览应用程序的文件并将应用程序数据保存在文件系统中的某个位置,而不是简单地浏览到文档文件夹.
| 归档时间: |
|
| 查看次数: |
3894 次 |
| 最近记录: |