本文转载自:
说明: 这里我根据个人工作情况说明在各个层打印log。如有问题欢迎拍砖。
1. Java层打印log。
这个比较简单Android有封装好的Log.java, 可以使用。例如:Log.d(String Tag, String msg);
个人习惯: 单独写一个类包装一下:MLog.java:
import android.util.Log;
public class MLog {
public final static boolean DEBUG = true;public static void d(String tag, String msg) {
if (DEBUG) { Log.d(tag, msg); } } ...}1234567891011122. Native 层打印log。网络上很多资料:http://stackoverflow.com/questions/12159316/logging-values-of-variables-in-android-native-ndk步骤如下:
Android.mk 中添加:
LOCAL_LDLIBS :=-llog
在需要打印的log的地方使用:
#include <android/log.h> #define TAG "DroidMage" // 这个是自定义的LOG的标识 #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) // 定义LOGD类型xxx_function() {
LOGD("%s hello world", "MSG");
}123456789NOTE: 这只是对__android_log_print() 函数做了包装而已 原型如下:/**
* int __android_log_print(int prio, const char *tag, const char *fmt, ...) * * ANDROID_LOG_DEBUG : 是在头文件定义的log level,类似与java层Log.d()打印Debug信息。 * tag : char * 类型的字符串。 * format : char* 格式化的字符串 */ // 例子: char * tag = "DroidMage"; char * format = "%s"; char * msg = "This is for test!"; __android_log_print(ANDROID_LOG_DEBUG, tag, format, msg);12345678910111213Android 中有 < cutils/log.h> 做好了封装:#define LOG_TAG DroidMage //一定要定义,原因是< log/log.h> 做了封装,没有定义则未NULL。
xxx_func() {
//log 的Tag就是所定义LOG_TAG LOGD("%s", msg);}12345673. bionic层打印log(笔者做过系统开发的工作,有时需要调试lib层)参考源码:”/bionic/libc/bionic/private/libc_logging.cpp”#include "private/libc_logging.h"
xxx_function() {//ANDROID_LOG_DEBUG: int 类型, 定义log level, 参考"/bionic/libc/bionic/private/libc_logging.h" 定义。
__libc_format_log(ANDROID_LOG_DEBUG, tag, "%s", msg);}123456789未完待续。。。--------------------- 作者:机器魔法师 来源:CSDN 原文:https://blog.csdn.net/AndroidMage/article/details/52225068 版权声明:本文为博主原创文章,转载请附上博文链接!