Android native log输出为kernel log方法



1:包含kernel log对应用户空间头文件#include <cutils/klog.h>

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);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值