我的代码 (.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 获取某些消息?提前致谢。
我的代码 (.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 获取某些消息?提前致谢。
如果这是出于调试目的,我使用这个宏:
#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 权限也可以访问的优点。
如果您的最终目标只是“记录”某些 logcat 输出,我强烈建议您在手机/设备上安装 Catlog 应用程序(如果您正在测试的话)并使用 Catlog 提供的“记录”功能。Catlog 允许您根据标签和搜索关键字查看和过滤 logcat 输出,结果输出可以保存到文件或作为附件通过电子邮件发送。如果您在 SDK 附带的模拟器上进行测试,只需保存 Eclipse 的 Logcat 窗口的输出即可。
您可以使用 vfprintf() 函数将变量参数列表写入文件。
这可能比从 Android 日志系统重新捕获您自己的日志消息并将其写入文件更干净,除非您还需要包含 Java 代码生成的消息。
如果您在应用程序下,则可以使用 /data/data//
如此干燥的实验室:
FILE f = fopen("/data/data/<application name>/<file name>", 'w');
fprintf(f, "my message\n");
fclose(f);
应该管用。