【问题标题】:android,NDK, write logs to a fileandroid,NDK,将日志写入文件
【发布时间】:2013-01-20 12:17:30
【问题描述】:

我的代码 (.c) 中有这行:

#define LOGI(x...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG,x)
#define LOGE(x...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,x)

我使用它们在 LogCat 中输出,如何修改这些行以将消息写入文件,或者如何在我的代码中从 LogCat 获取某些消息? 提前致谢。

【问题讨论】:

    标签: android logging android-ndk


    【解决方案1】:

    您可以使用 vfprintf() 函数将变量参数列表写入文件。

    这可能比从 Android 日志系统重新捕获您自己的日志消息并将其写入文件更干净,除非您还需要包含 Java 代码生成的消息。

    【讨论】:

      【解决方案2】:

      如果这是出于调试目的,我使用这个宏:

      #define WRITE_LOG(s, ...) do { \
      FILE *f = fopen("/data/local/tmp/log.txt", "a+"); \
        fprintf(f, s, __VA_ARGS__); \
        fflush(f); \
        fclose(f); \
      } while (0)
      

      它具有完全独立于 Android SDK/NDK 的优势,它允许调试本机代码而无需修改所有构建系统并包含以链接到 logcat 函数。

      不过有个小警告:我已经养成了在启动程序之前在 adb-shell 中使用 touch /data/local/tmp/log.txt 创建文件的习惯,因为在大多数情况下,系统会阻止您创建新文件。顺便说一下,位置 /data/local/tmp/ 的优点是即使没有 root 权限也可以访问。

      【讨论】:

      • 谢谢!这是完整写入日志且不中断的唯一方法。我也尝试使用带有标准输出的 freopen 来执行此操作,但这不能正常工作。
      【解决方案3】:

      如果您的最终目标只是“记录”某些 logcat 输出,我强烈建议您在手机/设备上安装 Catlog 应用程序(如果您正在测试的话)并使用 Catlog 提供的“记录”功能. Catlog 允许您根据标签和搜索关键字查看和过滤 logcat 输出,结果输出可以保存到文件或作为附件通过电子邮件发送。 如果您在 SDK 附带的模拟器上进行测试,只需保存 Eclipse 的 Logcat 窗口的输出即可。

      【讨论】:

        【解决方案4】:

        如果你在一个应用下,你可以使用/data/data//

        如此干燥的实验室:

        FILE f = fopen("/data/data/<application name>/<file name>", 'w');
        fprintf(f, "my message\n");
        fclose(f);
        

        应该可以。

        【讨论】:

          猜你喜欢
          • 2012-01-16
          • 2020-06-27
          • 2010-12-17
          • 2012-04-06
          • 2023-03-31
          • 1970-01-01
          • 2015-03-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多