3

我的代码 (.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 获取某些消息?提前致谢。

4

4 回答 4

9

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

#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 函数。

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

于 2013-02-05T16:35:03.330 回答
0

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

于 2013-02-12T02:48:15.263 回答
0

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

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

于 2013-02-05T14:34:07.013 回答
0

如果您在应用程序下,则可以使用 /data/data//

如此干燥的实验室:

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

应该管用。

于 2014-11-13T21:24:47.633 回答