2

我有一个可可应用程序核心库是可可应用程序使用的 C++。我需要将日志放在应用程序的两个部分中,以便在用户通过崩溃日志报告器(一个单独的组件)报告日志时轻松诊断问题。

应用程序的可可部分日志就像

NSLog(@"something..");

在 C++ 库中,它是 C++ 中的一个单独项目(不是 .mm,而是 .h 和 .cpp),我希望有类似的日志。所以如果我这样做

cout<<"log from C++";

如果程序崩溃,我似乎没有在崩溃日志报告器(一个客观的 C 组件)中获得日志。它似乎只能报告来自目标 C 的日志。但是,我确实在输出屏幕上看到了来自 C++ 的日志消息,但它似乎也没有完成将相同内容写入文件的工作,因此如果程序崩溃日志在那里被报告。

那么,如果程序崩溃,那么始终如一地编写日志的最佳方式是可报告的。鉴于该程序是可可并使用单独的 C++ 组件。

编辑

我使用的崩溃报告器是https://github.com/tcurdt/feedbackreporter ,示例日志之一位于我机器上的以下路径:/Users/myusername/Library/Logs/DiagnosticReports/MyApp_2013-09-08 -220142_mymac.crash

谢谢,

4

3 回答 3

2

目前尚不清楚您的崩溃日志报告者如何以及从何处收集日志。NSLog()将日志写入两个目的地,stderr 和 ASL(Apple 系统日志)数据库。

因此,让 C++ 日志转到与NSLog()使用cerr而不是cout. 然而,让他们去同一个地方最可靠的方法是使用 C++ 代码中的 ASL API。请参阅手册页。Peter Hosey 还在一系列博客文章(从此处开始)中探讨了 ASL,您可能会发现这些文章很有用。

于 2013-09-08T20:21:46.277 回答
0

参考https://github.com/flyskywhy/react-native-gcanvas/blob/master/core/src/support/Log.h

    typedef void (*GCanvasSystemLog)(const char *tag, const char *log);

API_EXPORT extern GCanvasSystemLog gcanvasSystemLog;

https://github.com/flyskywhy/react-native-gcanvas/blob/master/core/src/support/Log.cpp

        if (gcanvasSystemLog) {
            gcanvasSystemLog(tag, buffer);
        }

从而可以让 iOS 也有能力获取来自 cpp 的日志

void nsLog(const char *tag, const char *log) {
    NSLog(@"%s: %s", tag, log);
}
...
    // to get the log comes from cpp
    gcanvasSystemLog = nsLog;
于 2022-03-03T05:17:48.250 回答
0

你可以使用 fprintf,但它只显示在 XCode 中

fprintf(stderr, "Log string: %s", aStringVariable);

如果您从 XCode 调试时会显示 printf,但它不会显示在 Organizer Console 中。您可以运行以下命令以仅打印到设备的控制台:

syslog(LOG_WARNING, "log string");

您还需要 #include <sys/syslog.h> 以显式声明 syslog 和 LOG_WARNING

于 2021-08-02T07:56:43.243 回答