Android native log输出为kernel log方法



1:包含kernel log对应用户空间头文件#include

2:

#define KPOC_LOGI(x...) do { KLOG_ERROR("client", x); } while (0)
#define KPOC_LOGE(x...) do { KLOG_WARNING("client", x); } while (0)
#define KPOC_LOGD(x...) do { KLOG_DEBUG("client", x); } while (0)

定义log宏。 默认kernel log为最低等级3 可以使用

void klog_init(void);
int  klog_get_level(void);
void klog_set_level(int level);  设置输出等级


3:如果没有看到输出日志可能selinux 权限问题 需要使用security_setenforce(false)。

static const struct selinux_opt seopts_prop[] = {
        { SELABEL_OPT_PATH, "/property_contexts" },
        { SELABEL_OPT_PATH, "/data/security/current/property_contexts" },
        { 0, NULL }
};

struct selabel_handle* selinux_android_prop_context_handle(void)
{
    int policy_index = selinux_android_use_data_policy() ? 1 : 0;
    struct selabel_handle* sehandle = selabel_open(SELABEL_CTX_ANDROID_PROP,
                                                   &seopts_prop[policy_index], 1);
    if (!sehandle) {
        ALOGD("SELinux:  Could not load property_contexts:  %s\n",
              strerror(errno));
        return NULL;
    }
    ALOGD("SELinux: Loaded property contexts from %s\n", seopts_prop[policy_index].value);
    return sehandle;
}


void selinux_init_all_handles(void)
{
    sehandle = selinux_android_file_context_handle();
    selinux_android_set_sehandle(sehandle);
    sehandle_prop = selinux_android_prop_context_handle();
}

static void selinux_initialize(void)
{
    selinux_init_all_handles();
    security_setenforce(false);
}

你可能感兴趣的:(framework)