请教 __android_log_print,LOG_TAG 问题和原理

sinkary 2012-04-19 03:43:52
In Android 4.0.3,
I modified the file "system/core/include/cutils/log.h"
I added the code below:

/*
* my log for trace code
*/
#ifndef MYNO
#define MYNO
static long myNo = 0;
#endif
//
#ifndef MYLOG
#define MYLOG(...) \
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "***It's My Log!*** No. %ld: ", myNo); \
__android_log_print(ANDROID_LOG_ERROR, NULL, __VA_ARGS__); \
myNo++;
#endif

When i use logcat -s InputReader to see my log, i can only see:
E/InputReader( 308): ***It's My Log!*** No. 0:
E/InputReader( 308): ***It's My Log!*** No. 1:

Must I change the second __android_log_print: NULL to LOG_CAT?
But I want to see the input events show after the number.

I really track the MACRO to know why, but I just can's get the reason.
How can I solve this problem?
...全文
1240 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinkary 2012-04-25
  • 打赏
  • 举报
回复
__VA_ARGS__确实就是一个宏,用来代替MYLOG(...)中省略号所表示的参数列表,它会直接替换成实际的参数。

我是为了写和看自己的log方便,而定义的MYLOG
dontsaymiss 2012-04-24
  • 打赏
  • 举报
回复
这就是一个宏吧
2Tu 2012-04-24
  • 打赏
  • 举报
回复
你妹,这是NDK啊。高端 ,求带练级
sinkary 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "***It's My Log!*** No. %ld: " + __VA_ARGS__, myNo);
[/Quote]

"..." + __VA_ARGS__
两个字符串不能相加的。
我找到解决办法了,就是仿照__android_log_print重新定义一个MYPRINT:

static int MYPRINT(int prio, const char *tag, const char *fmt, ...) {
va_list ap;

char *my_tag = "***It's My Log!*** No. ";
int len;

char buf[LOG_BUF_SIZE];
len = sprintf(buf, "%s%ld: ", my_tag, myNo++);

va_start(ap, fmt);
vsnprintf(buf+len, LOG_BUF_SIZE-len, fmt, ap);
va_end(ap);

return __android_log_write(prio, tag, buf);
}
AMinfo 2012-04-19
  • 打赏
  • 举报
回复
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "***It's My Log!*** No. %ld: " + __VA_ARGS__, myNo);

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧