【鸿蒙(HarmonyOS)开发】native层开发日志显示的问题解决方案
这里,写一篇文章,总结一下我在鸿蒙native层开发的时候,输出日志是我们观察程序结果和调试的重要方案,本文记录一下,我在使用日志的过程当中遇到的问题,仅供大家参考。
开发环境
我这里只有9的API,因此这里基于API 9进行测试,对于大于API 9的版本,因为我拿不到对应的sdk,因此无法测试,对于高版本文档,我这也看不了,因此也没办法查阅。
具体环境如上图所示。
如何添加日志库
target_link_libraries(libhilog_ndk.z.so)
日志输出问题
static napi_value LogPrint(napi_env env, napi_callback_info info) {
LOGD("%s, %d, %f", "LQ", 123, 1.0f);
napi_value ret;
napi_create_int32(env, 0, &ret);
return ret;
}
你是否遇到过,日志不显示,只显示为<private>
如果你也遇到了和我这个一样的问题,我们来看一下文档。
于是乎,我们需要这么来写。
static napi_value LogPrint(napi_env env, napi_callback_info info) {
LOGD("%{public}s, %{public}d, %{public}f", "LQ", 123, 1.0f);
napi_value ret;
napi_create_int32(env, 0, &ret);
return ret;
}
这样,就可以正常来显示日志了。我们需要每次都手动添加{public}
,显得十分的麻烦,因此,我们需要稍微改进一下,这里封装一个函数,自动添加吧。
#include <regex>
#define TAG "LQ->"
std::string modifyString(const std::string &format) {
static const std::regex re("%([sdxfeg]*)");
return std::regex_replace(format, re, "%{public}$1");
}
#define LOGI(fmt, ...) ((void)OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, TAG, modifyString(fmt).c_str(), __VA_ARGS__))
#define LOGW(fmt, ...) ((void)OH_LOG_Print(LOG_APP, LOG_WARN, LOG_DOMAIN, TAG, modifyString(fmt).c_str(), __VA_ARGS__))
#define LOGD(fmt, ...) ((void)OH_LOG_Print(LOG_APP, LOG_DEBUG, LOG_DOMAIN, TAG, modifyString(fmt).c_str(), __VA_ARGS__))
#define LOGE(fmt, ...) ((void)OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_DOMAIN, TAG, modifyString(fmt).c_str(), __VA_ARGS__))
好了,这样使用起来,就显得非常的舒服了。
总结
本文呢,给出了在native层添加日志的方案,以及日志要想正常的显示,需要添加{public}
的标签,这里给出了一个自动添加标签的方案,这个方案仅供参考。
参考资料
-
https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/_hi_log-0000001447130392-V3
原文始发于微信公众号(Coder小Q):【鸿蒙(HarmonyOS)开发】native层开发日志显示的问题解决方案
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论