HarmonyOS鸿蒙Next中napi_init.cpp文件中函数的OH_LOG_Print不能打印日志?

HarmonyOS鸿蒙Next中napi_init.cpp文件中函数的OH_LOG_Print不能打印日志? 我创建了一个native C++的项目,需要在napi_init.cpp的调用函数中打印日志,在执行过程中使用hdc hilog > log.txt来搜集打印的日志,我发现在index.ets中执行hilog.info语句可以在log.txt中找到,但是在napi_init.cpp中使用下面语句打印的内容看不到

OH_LOG_Print(LOG_APP, LOG_INFO, DOMAIN, TAG, "xxxx");

在index.ets中有如下定义:

const DOMAIN = 0x0000;

在napi_init.cpp中有如下定义:

const int DOMAIN = 0xFFF4;
const char *TAG = "[VirtualUSB=>]";

可能原因在哪里啊?


更多关于HarmonyOS鸿蒙Next中napi_init.cpp文件中函数的OH_LOG_Print不能打印日志?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

发现了原因,是由于我在napi中使用dlopen的方式打开另一个共享动态库,然后这个独立的共享动态库中使用hilog来打印日志,在编译这个独立共享动态库的时候需要link hilog的动态库so文件,然后我在DevEco的项目中把hilog的动态库so文件也放在了项目的libs目录下,然后就不能工作了,删除了这个文件就可以打印日志了

更多关于HarmonyOS鸿蒙Next中napi_init.cpp文件中函数的OH_LOG_Print不能打印日志?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,OH_LOG_Print 函数无法打印日志,通常是由于日志级别设置过高或模块未正确注册导致的。请检查 hilog 的标签注册和级别配置,确保当前日志级别(如 LOG_DEBUG)低于或等于系统设置的输出级别。同时,确认 napi_init.cpp 中日志初始化代码已正确执行。

在HarmonyOS Next中,OH_LOG_Print 在Native C++侧无法打印日志,而ETS侧的hilog.info可以,通常由以下几个原因导致:

  1. DOMAIN值冲突或未注册:这是最常见的原因。您代码中ETS侧DOMAIN为0x0000,而C++侧为0xFFF4。在HarmonyOS Next中,应用的DOMAIN需要在其module.json5配置文件中明确定义并确保唯一。C++代码中使用的DOMAIN必须与配置文件中的声明完全一致,否则日志系统会过滤掉。

    解决方法

    • 检查您的module.json5文件,在“abilities”“extensionAbilities”的同级,添加“domain”字段配置。例如:
      {
        "module": {
          ...
          "domain": "0xFFF4"
        }
      }
      
    • 确保C++代码中的DOMAIN常量(0xFFF4)与module.json5中配置的值完全一致
    • ETS侧也应使用同一个已注册的DOMAIN(建议改为0xFFF4),而非0x0000
  2. 日志级别过滤hdc hilog命令默认可能只捕获特定级别以上的日志。您使用的LOG_INFO级别是正常的,但可以尝试使用LOG_DEBUGLOG_ERROR级别进行测试,并使用hdc hilog -L D(捕获Debug及以上级别)或hdc hilog -L I(捕获Info及以上级别)命令来确保捕获范围覆盖。

  3. 编译配置问题:确保Native C++部分的编译配置正确链接了Hilog NDK库。在CMakeLists.txt中,需要添加对libhilog_ndk.z.so的依赖。

    target_link_libraries(your_target PUBLIC libhilog_ndk.z.so)
    
  4. 代码执行路径未触发:确认包含OH_LOG_Print的C++函数确实被成功调用。可以在该函数入口处添加一个更明显的日志(如LOG_ERROR级别)或通过其他方式(如返回值)验证执行流。

建议的排查步骤: 首先,重点检查并修正module.json5中的DOMAIN配置,确保与C++代码中的0xFFF4匹配。这是导致该问题的最可能原因。 其次,使用更明确的日志捕获命令:hdc hilog -L D > log.txt 以确保捕获所有级别的日志。 最后,验证C++函数的调用是否确实发生。

回到顶部