当前位置:   article > 正文

鸿蒙源码分析(十七)_鸿蒙开发怎么定义方法

鸿蒙开发怎么定义方法

安全密钥模块下的日志调试代码hks_log_utils.c及其头文件分析

本篇主要分析 安全密钥模块下的日志调试代码hks_log_utils.c
文件路径(security_huks\frameworks\huks_lite\source\hw_keystore_sdk\common\hks_log_utils.c)

代码分析

1.头文件hks_log_utils.h

1. 函数声明

#define HKS_LOG_TAG  "[HKS]" //日志标签
void hks_register_log(const struct hks_log_f_group *log);//申明一个寄存器日志函数
hks_log_func get_log_info(void); //获取日志索引信息
hks_log_func get_log_warn(void); //获取警告日志
hks_log_func get_log_error(void); //获取报错日志
hks_log_func get_log_debug(void); //获取调试日志
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2. 宏定义部分参数

#if !(defined(_CUT_LOG_))
#define log_info(...) get_log_info()(HKS_LOG_TAG, __func__, __VA_ARGS__)
#define log_warn(...) get_log_warn()(HKS_LOG_TAG, __func__, __VA_ARGS__)
#define log_error(...) get_log_error()(HKS_LOG_TAG, __func__, __VA_ARGS__)
#define log_debug(...) get_log_debug()(HKS_LOG_TAG, __func__, __VA_ARGS__)//一些相关宏定义函数,用途同上
#else
#define log_info(...) {}
#define log_warn(...) {}
#define log_error(...) {}
#define log_debug(...) {}
#endif

#define HKS_TRACE_IN   log_debug("-->")
#define HKS_TRACE_OUT  log_debug("<--")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3. 宏定义函数

#define hks_if_status_error_return(s) \//宏定义函数,用来检查是否为error状态,如果是则返回引起错误的对象
    if ((s) != HKS_SUCCESS) { \
        log_error("%s %d return error : %d.\n", __func__, __LINE__, (s)); return s; }

#define hks_if_status_error_return_err(s, err) \//宏定义函数,用来检查是否为error状态,如果是则返回引起错误码
    if ((s) != HKS_SUCCESS) { \
        log_error("%s %d status: %d.return error : %d.\n", __func__, __LINE__, (s), (err)); return err; }

#define hks_if_true_return_error(s, err) \
    if ((s) == HKS_BOOL_TRUE) { \ //如果s等于1,满足bool_true,返回错误码err
        log_error("%s %d return status: %d.\n", __func__, __LINE__, (err)); return err; }

#define hks_if_status_error_goto_error(s, err) \//如果发生报错则定位到报错位置
    if ((s) != HKS_SUCCESS) { \
        log_error("%s %d status: %d.goto error\n", __func__, __LINE__, (s)); goto err; }
        //使用goto实现跳转
#endif

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2.源文件hks_log_utils.c

1.定义相关变量

#include "hks_log_utils.h"

static void logi(const char *tag, const char *func, const char *format, ...);// 日志信息
static void logw(const char *tag, const char *func, const char *format, ...);//日志警告
static void loge(const char *tag, const char *func, const char *format, ...);//日志报错
static void logd(const char *tag, const char *func, const char *format, ...);//日志调试


static struct hks_log_f_group g_log_func = { logi, logw, loge, logd };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.定义函数
hks_register_log()函数用来将log中信息复制到另一个地方,实现日志的寄存

void hks_register_log(const struct hks_log_f_group *log)//日志的寄存函数
{
    if (log == NULL)
        return;//检查传入参数

    if (log->log_info != NULL)
        g_log_func.log_info = log->log_info;

    if (log->log_warn != NULL)
        g_log_func.log_warn = log->log_warn;

    if (log->log_error != NULL)
        g_log_func.log_error = log->log_error;

    if (log->log_debug != NULL)
        g_log_func.log_debug = log->log_debug;
    //将传入参数log中的数据写进g_log_func
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

下面四个函数分别用来获取得到日志的不同信息(info,warn,error,debug)

hks_log_func get_log_info(void)//用来获取日志信息
{
    return g_log_func.log_info;
}

hks_log_func get_log_warn(void)//用来获取日志警告
{
    return g_log_func.log_warn;
}

hks_log_func get_log_error(void)//用来获取日志错误
{
    return g_log_func.log_error;
}

hks_log_func get_log_debug(void)//获取调试信息
{
    return g_log_func.log_debug;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

下面为一些默认的日志信息(info,error,warn,debug)界面

/* 默认的日志信息界面 */
static void logi(const char *tag, const char *func, const char *format, ...)
{
    (void)tag; (void)func; (void)format;
}

/* 默认的日志警告界面 */
static void logw(const char *tag, const char *func, const char *format, ...)
{
    (void)tag; (void)func; (void)format;
}

/* 默认的日志报错界面 */
static void loge(const char *tag, const char *func, const char *format, ...)
{
    (void)tag; (void)func; (void)format;
}

/*默认的日志调试界面*/
static void logd(const char *tag, const char *func, const char *format, ...)
{
    (void)tag; (void)func; (void)format;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

以上为hks_log_utils.c日志工具类代码分析,感谢阅读点赞。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/325062
推荐阅读
相关标签
  

闽ICP备14008679号