android,NDK,将日志写入文件

时间:2013-02-05 14:24:57

标签: android logging android-ndk

我的代码(.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 个答案:

答案 0 :(得分:8)

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

#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创建文件的习惯,因为在大多数情况下系统会阻止您创建新文件。顺便说一句,location / data / local / tmp /具有即使没有root权限也可以访问的优势。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

如此干燥的实验室:

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

应该有用。