赞
踩
本篇主要分析 安全密钥模块下的日志调试代码hks_log_utils.c
文件路径(security_huks\frameworks\huks_lite\source\hw_keystore_sdk\common\hks_log_utils.c)
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); //获取调试日志
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("<--")
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.定义相关变量
#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 };
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
}
下面四个函数分别用来获取得到日志的不同信息(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;
}
下面为一些默认的日志信息(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;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。