您的位置:首页 > 编程语言 > C语言/C++

如何在android 系统 C/C++ 层中添加 log 信息

2013-05-12 19:39 330 查看
一般情况下,我们在 android 原始 framework 层的 C/C++ 代码中添加 log 信息非常方便:

只需要添加如下头文件 :

#define LOG_TAG "MediaRecorder"

#include <utils/Log.h>

并且在 函数中添加如下 log 输出信息(如蓝色字体显示):

status_t MediaRecorder::setCamera(const sp<ICamera>& camera)

{

    LOGV("setCamera(%p)", camera.get());

    if(mMediaRecorder == NULL) {

        LOGE("media recorder is not initialized yet");

        return INVALID_OPERATION;

    }

    if (!(mCurrentState & MEDIA_RECORDER_IDLE)) {

        LOGE("setCamera called in an invalid state(%d)", mCurrentState);

        return INVALID_OPERATION;

    }

    status_t ret = mMediaRecorder->setCamera(camera);

    if (OK != ret) {

        LOGV("setCamera failed: %d", ret);

        mCurrentState = MEDIA_RECORDER_ERROR;

        return ret;

    }

    return ret;

}

如果我们要将第三方的 C/C++ 文件移植到 framework 代码中怎么办呢,用上述方法就不一定凑效了。

我们需要在该 C/C++ 中添加

#include <android/log.h>

并且宏定义一下原始的 log 输出函数 __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG, __VA_ARGS__); 

或者 __android_log_write(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__);

这样就不需要在打 log 的时候敲入那么多字符了

宏定义如下:

#define LOG_TAG "MediaRecorder"

#define LOG(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG, __VA_ARGS__)

使用实例:

LOG("InitFbImage format = %d, width = %d, height = %d", format, width, height);

当然,你也可以只打印点字符信息

LOG("InitFbImage");

Log 信息查看:

所有的 log 信息都可以通过控制台输出。只要过滤 LOG_TAG 或者其它某关键字即可查看

adb logcat -s MediaRecorder  

或 adb logcat | find "log" 

adb logcat | grep "log"

但内核 log 例外,内核的 log 存放的目录不同

adb shell cat proc/kmsg

刚刚看到了一篇文章比较系统的讲解了 android log 系统的来龙去脉:http://blog.csdn.net/luoshengyang/article/details/6581828#comments

推荐!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: