在Android里添加自己的log函数

在调试js时,js里面的C++代码用Android本省带有的LOGD等这些log函数无法将log打印到屏幕上,在网上查找到一个解决的方法:

LOGW(a) __android_log_write(ANDROID_LOG_WARN,LOG_TAG,a)

但是这个log函数只能打印字符串无法打印一个变量的值,这在调试时就很不方便了,受到这个log函数的启发,于是自己写了一个log函数添加到android的系统里.这个函数的功能和printf()函数一样,可以打印你想要的内容。


首先在/system/core/liblog/目录下的logd_write.c中把自己写的log函数的实现写到这里

log函数的实现:

  1. int JSLOG(int prio, char * tag, char * format,...)   
  2. {   
  3.     va_list ap;   
  4.     char buf[1024];   
  5.   
  6.     va_start(ap,format);   
  7.     vsnprintf(buf, 1024, format, ap);   
  8.     va_end(ap);   
  9.     return __android_log_write(prio, tag, buf);   
  10. }   
int JSLOG(int prio, char * tag, char * format,...) 
{ 
	va_list ap; 
	char buf[1024]; 

	va_start(ap,format); 
	vsnprintf(buf, 1024, format, ap); 
	va_end(ap); 
	return __android_log_write(prio, tag, buf); 
} 

再将函数的声明添加到system/core/include/cutils/log.h文件中

或将函数的声明放到system/core/include/android/log.h文件中

(将函数的声明放到上述的两个文件中个那一个都可以,只要在你引用这个函数时加上这个函数的声明的头文件即可)


我又将这个函数进行了一下封装,封装的思想是,原有的JSLOG()这个函数只会打印你输入的信息,不会自动的打印这个log函数所在的函数的函数名和log函数所在文件的行数,如果不进行一下封装,要想打印函数名和log信息所在文件的行数,就的每次在写log时都的重复的将打印函数名的宏和打印行数的宏写上,为了减少重复的工作于是进行了一下封装。

将其写在一个同文件里,详细内容如下:

  1. #ifndef OWNLOG_H   
  2. #define OWNLOG_H   
  3.   
  4. #include <android/log.h>   
  5. /*  
  6. 如果log函数的声明放到system/core/include/android/log.h目录下这里就应该写上这个头文件  
  7.   
  8. *如果是函数声明是放到了system/core/include/cutils/log.h  这个头文件里 这里就要写上   
  9. *#include <cutils/log.h>  
  10. */   
  11.   
  12. #define JS_LOG  1    //  这里定义JS_LOG这个宏是为了调试时用 宏为1时打印log 否则不打印log   
  13.                                
  14. #if  JS_LOG   
  15. #define  JS(fmt,...) JSLOG(ANDROID_LOG_WARN, LOG_TAG, "%s (line: %d) " fmt, __FUNCTION__,__LINE__,##__VA_ARGS__)   
  16.   
  17. #define LOGW(a) __android_log_write(ANDROID_LOG_WARN,LOG_TAG,a)   
  18. #else   
  19. #define JS(ftm,...) ((void)0)   
  20. #define LOGW(a)((void)0)   
  21. #endif   
  22.   
  23. #endif   
#ifndef OWNLOG_H 
#define OWNLOG_H 

#include <android/log.h> 
/*
如果log函数的声明放到system/core/include/android/log.h目录下这里就应该写上这个头文件

*如果是函数声明是放到了system/core/include/cutils/log.h  这个头文件里 这里就要写上 
*#include <cutils/log.h>
*/ 

#define JS_LOG  1    //  这里定义JS_LOG这个宏是为了调试时用 宏为1时打印log 否则不打印log 
                             
#if  JS_LOG 
#define  JS(fmt,...) JSLOG(ANDROID_LOG_WARN, LOG_TAG, "%s (line: %d) " fmt, __FUNCTION__,__LINE__,##__VA_ARGS__) 

#define LOGW(a) __android_log_write(ANDROID_LOG_WARN,LOG_TAG,a) 
#else 
#define JS(ftm,...) ((void)0) 
#define LOGW(a)((void)0) 
#endif 

#endif 

__FUNCTION__在打印函数名是不会打印这个函数所在的文件的全路径

__func__在打印函数名时会打印这个函数所在的文件的全路径

http://blog.csdn.net/ydt_lwj/article/details/7767171

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值