53

我在 Android NDK 中使用C++设置日志记录。

我可以像这样向 logcat 打印一条消息:

__android_log_write(ANDROID_LOG_INFO, "tag here", "message here");

现在假设我有一个名为testint的整数。如何打印这个 int 的值?

像这样的东西打印地址,但我想要这个值。我在C++中没有找到任何关于如何执行此操作的内容。谢谢你的帮助!

__android_log_print(ANDROID_LOG_INFO, "sometag", "%p", *test);
4

4 回答 4

71

这是我见过的最简洁的方式:

#include <android/log.h>

#define  LOG_TAG    "someTag"

#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#define  LOGW(...)  __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)
#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)

...

// Now you can log very simply like this:
int foo = 42;
LOGD( "This is a number from JNI: %d", foo );

此外,请确保链接到 Android.mk 中的日志库:

LOCAL_LDLIBS    := -llog
于 2013-11-21T02:10:33.880 回答
52

您可以使用__android_log_printwhich 使用类似sprintf- 的语法将数据格式化为字符串。

__android_log_print(ANDROID_LOG_INFO, "sometag", "test int = %d", testInt);
于 2012-08-28T12:39:21.760 回答
14

利用您可用的可变参数日志打印功能。对于我自己的代码,我提供了一个 LogInfo() 函数以使其变得简单。当然,这里有几个选项可供您使用。

void LogInfo(const char *sTag, const char *fmt, ...)
{
  va_list ap;
  va_start(ap, fmt);
  __android_log_vprint(ANDROID_LOG_INFO, sTag, fmt, ap);
  va_end(ap);
}
于 2012-08-28T12:46:59.880 回答
11

__android_log_print() 采用格式字符串和变量参数列表。您要打印出带符号整数的格式说明符是“%d”。所以像这样的东西就是你想要的:

int foo = 42;
__android_log_print(ANDROID_LOG_INFO, "SomeTag", "foo is %d", foo);

有关格式字符串的更多信息,您可以查看sprintf 手册

于 2012-08-29T07:03:35.790 回答