---
title: kdc_proxy日志注册接口
description: "连接器向kdc_agent注册日志回调函数，kdc_proxy接管连接器日志。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/tee/kdcl/kdcl_kfzn_015.html
sourcePath: /source/zh/kunpengcctrustzone/tee/kdcl/kdcl_kfzn_015.html
indexId: 132cf51e9f0f972db0de97e2160f793e5231c70ae3b5015fadabc9ba9e1faaf857
---
# kdc_proxy日志注册接口

连接器向kdc_agent注册日志回调函数，kdc_proxy接管连接器日志。

#### 函数原型

```
uint32_t SetLogCallback(SetLogCallbackFunc cb);
```


#### 参数说明

连接器需要提供四参数的日志函数，分别表示严重等级、日志信息、文件名和代码行。


```
typedef enum {
KDC_LOG_LEVEL_DEBUG = 0,
KDC_LOG_LEVEL_INFO,
KDC_LOG_LEVEL_WARN,
KDC_LOG_LEVEL_ERROR,
} KdcLogLevel;
typedef void (*SetLogCallbackFunc)(KdcLogLevel severity, const char *msg, const char *file, int32_t line);
```

#### 返回值说明

| 返回值 | 含义 |
| --- | --- |
| 0 | 成功 |
| 非0 | 失败 |


#### 注意事项

建议在一开始就调用，保证kdc_proxy能记录后续运行状态日志。


#### 使用示例

1. 准备好连接器日志函数。

```
static void stress_log(int32_t severity, const char *msg, const char *file, int32_t line)
{
const char *level;
switch (severity) {
case 0: level = "DEBUG"; break;
case 1: level = "INFO "; break;
case 2: level = "WARN "; break;
default: level = "ERROR"; break;
}
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
struct tm *tm_info = localtime(&ts.tv_sec);
char timestamp[32];
strftime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S", tm_info);
int millis = (int)(ts.tv_nsec / 1000000);
if (g_worker_log) {
fprintf(g_worker_log, "[%s.%03d] [%s] [kdc_proxy] [%s:%d] %s\n",
timestamp, millis, level, file, line, msg);
fflush(g_worker_log);
}
}
```


2. 调用接口将日志回调设置给kdc_proxy（调用一次即可）。

```
uint32_t ret = SetLogCallback(stress_log);
if (ret != 0) {
// 处理错误
return;
}
```
