HarmonyOS鸿蒙Next开发c层日志打印不出

HarmonyOS鸿蒙Next开发c层日志打印不出

OH_LOG_SetMinLogLevel(LOG_INFO);
OH_LOG_INFO(LOG_APP, "Failed to visit path.");
// 设置应用日志最低打印级别,设置完成后,低于Warn级别的日志将无法打印
OH_LOG_SetMinLogLevel(LOG_WARN);
OH_LOG_DEBUG(LOG_APP, "this is an info level log");
OH_LOG_INFO(LOG_APP, "this is an info level log");
OH_LOG_ERROR(LOG_APP, "this is an error level log");
// 设置应用日志PREFER_OPEN_LOG策略的最低打印级别,设置完成后,不低于INFO级别的日志都可打印
OH_LOG_FATAL(LOG_APP, "this is an another info level log");

为啥无论怎么设置都打印不出日志啊


更多关于HarmonyOS鸿蒙Next开发c层日志打印不出的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

开发者你好,参考以下方案:

【问题定位】 检查代码中是否定义了宏LOG_TAG。

【分析结论】 OH_LOG_INFO此类宏定义中使用LOG_DOMAIN和LOG_TAG作为传参,当没有定义LOG_TAG时,LOG_TAG的默认值为NULL,将导致打印无法输出。此外LOG_DOMAIN的范围是0x0到0xFFFF,超出这个范围同样会导致打印无法输出。

#ifndef LOG_DOMAIN
#define LOG_DOMAIN 0
#endif

#ifndef LOG_TAG
#define LOG_TAG NULL
#endif

以OH_LOG_INFO为例:

#define OH_LOG_INFO(type, ...) ((void)OH_LOG_Print((type), LOG_INFO, LOG_DOMAIN, LOG_TAG, __VA_ARGS__))

【修改建议】 在代码中添加相关宏定义,确保LOG_DOMAIN范围在0x0到0xFFFF之间,LOG_TAG不为空。

#undef LOG_DOMAIN
#undef LOG_TAG
#define LOG_DOMAIN 0x3200  // 全局domain宏,标识业务领域
#define LOG_TAG "MY_TAG"   // 全局tag宏,标识模块日志tag

更多关于HarmonyOS鸿蒙Next开发c层日志打印不出的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙Next开发中C层日志无法输出,需检查以下配置:确保内核日志开关已开启,确认hilog组件在C代码中正确引用,验证日志级别设置不低于系统当前级别。检查设备连接状态与日志服务是否正常,排查缓冲区大小及过滤规则。若使用DevEco Studio,需确认日志窗口过滤器未屏蔽C层输出。

在HarmonyOS Next的C层开发中,日志打印不出通常与日志级别配置或策略相关。根据你的代码示例,问题可能出在:

  1. 你设置了OH_LOG_SetMinLogLevel(LOG_WARN)后,只有WARN及以上级别(WARN、ERROR、FATAL)的日志才会输出。因此OH_LOG_DEBUGOH_LOG_INFO不会显示。

  2. 确保在ohos::InitParams中正确配置了日志策略。例如:

    ohos::InitParams params;
    params.logLevel = OH_LOG_LEVEL_INFO; // 设置全局日志级别
    ohos::SetInitParams(params);
    
  3. 检查是否在BUILD.gn中添加了hilog依赖:

    external_deps = [ "hilog_native:libhilog" ]
    
  4. 确认设备或模拟器的系统日志级别未过滤掉应用日志。可通过hilog -L查看当前级别。

建议先尝试仅使用OH_LOG_ERROROH_LOG_FATAL测试,确保基础功能正常,再调整级别。

回到顶部