Android Native C Log

本文介绍了Android平台中Java层和Native C层的日志记录方法。详细解释了如何通过不同宏定义来输出不同级别的日志信息,并展示了如何在adb shell中通过logcat命令查看特定TAG的日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 提供了log系统方便调试
0 Java层提供了Log.i, log.d, log.e ...
1 C++ 则有 ALOGW, ALOGE, ALOGI ...
    /*
     * Android log priority values, in ascending priority order.
     */
    typedef enum android_LogPriority {
        ANDROID_LOG_UNKNOWN = 0,
        ANDROID_LOG_DEFAULT,    /* only for SetMinPriority() */
        ANDROID_LOG_VERBOSE,
        ANDROID_LOG_DEBUG,
        ANDROID_LOG_INFO,
        ANDROID_LOG_WARN,
        ANDROID_LOG_ERROR,
        ANDROID_LOG_FATAL,
        ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */
    } android_LogPriority;

        #define LOG_NDEBUG 0 // 设置debug 级别为0, 则LOGV, LOGI, 等全部生效
        #define LOG_TAG "keyword"
        #include <cutils/log.h>
        LOGD("%s() in %s, Line: %d\n", __func__, __FILE__, __LINE__);
2 如果是我们在使用Native C在做的时候,实际上也是可以利用LOG来输出调试信息的。查看方式一样。
2.1 方法1
    #include <utils/Log.h>
    我们查看这个文件system/core/include/cutils/log.h

    #ifndef LOG_TAG
    #define LOG_TAG NULL
    #endif

    对于这个词我们的敏感度,我们知道,需要设置TAG信息。
    那么我们可肯定是需要在使用这个log.h前,定义一个LOG_TAG

    那么在Native C中我们常用的做法如下
    #define LOG_TAG "keyword"
    #include <utils/Log.h>

    然后使用LOGI,LOGD,LOGV,LOGW,LOGE来输出log信息,例如
    LOGD("%s() in %s, Line: %d\n", __func__, __FILE__, __LINE__);

    然后在adb shell 中使用
    logcat -s keyword
    即可查看到 LOG_TAG 为 "keyword" 的debug信息
2.2 方法2
    2.2.1 在对应的mk文件中加入
        LOCAL_LDLIBS := -llog
    2.2.2 在要使用LOG的cpp文件中加入
        #include <android/log.h>
        #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "keyword", __VA_ARGS__)

    2.2.3 这样就可以使用
        LOGD("%s() in %s, Line: %d\n", __func__, __FILE__, __LINE__);

    这样,在logcat端看到的输出是
        D/keyword( 32): ......

    如果想改变输出中的各项内容,可以参考相应颜色的标示,比如,如果想定义LOGE,就可以把上面的ANDROID_LOG_DEBUG改成ANDROID_LOG_ERROR,同理,LOGI什么的也都以此类推
    #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "keyword", __VA_ARGS__)
    #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG ,  "keyword", __VA_ARGS__)
    #define LOGI(...) __android_log_print(ANDROID_LOG_INFO  ,  "keyword", __VA_ARGS__)
    #define LOGW(...) __android_log_print(ANDROID_LOG_WARN  ,  "keyword", __VA_ARGS__)
    #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR  , "keyword", __VA_ARGS__)
    当然,如果不嫌麻烦,也可以直接使用__android_log_print函数,而不define定义LOGxxx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值