---
title: UDF日志接口简介
description: "UDF Python开放了日志记录接口，使用时导入flow_func模块。使用其中定义的logger对象，调用logger对象封装的不同级别的日志接口。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/dataflowdevg/udfrefp_23_0075.html
sourcePath: /source/zh/canncommercial/900/others/dataflowdevg/udfrefp_23_0075.html
indexId: 68e6935a7eb00a6bff0e7c5eb85e788a82a06b2f449ae3cd042e145d26aa046570
---
# UDF日志接口简介

UDF Python开放了日志记录接口，使用时导入flow_func模块。使用其中定义的logger对象，调用logger对象封装的不同级别的日志接口。


**表1 日志分类**

| 日志类型 | 使用场景 | 日志级别 | 对应的日志宏 |
| --- | --- | --- | --- |
| 运行日志 | 系统运行过程中的异常状态、异常动作、系统进程运行过程中的关键事件和系统资源占用的相关信息等需要记录运行日志。 | ERROR/INFO | 运行日志Error级别日志宏/运行日志Info级别日志宏 |
| 调试日志 | 以下场景（包括但不限于这些场景）需要记录为调试级别的日志： \- 接口调用、函数调用等所有调用的入口、出口 \- 操作入口处和设置预置条件 \- 定时器启动、超时 \- 状态设置、状态迁移条件判断前后 \- 业务相关资源统计、业务处理出入口、性能计算统计 \- 所有处理失败、异常等 调试级别日志记录的是代码级的信息，用于开发人员定位问题。 | ERROR/WARN/INFO/DEBUG | 调试日志Error级别日志宏/调试日志Warn级别日志宏/调试日志Error级别日志宏/调试日志Debug级别日志宏 |


日志使用样例：

```
import dataflow.flow_func as ff
ff.logger.info("This is a test info log :%s %d %f.", "test_str", 100, 0.1)
```


日志级别修改请参考《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref_07_0001.html)》中ASCEND_GLOBAL_LOG_LEVEL及ASCEND_MODULE_LOG_LEVEL的使用，用户UDF日志对应的模块为APP，可以根据模块单独控制APP日志级别。

例如：用户想开启自定义UDF的Info级别日志，可以使用下面命令单独打开APP模块的info级别日志

```
export ASCEND_MODULE_LOG_LEVEL=APP=1
```

也可以使用下方命令打开所有模块的info级别日志

```
export ASCEND_GLOBAL_LOG_LEVEL=1
```

UDF执行过程中，会对APP模块日志进行流控，以防止过多太多影响框架日志以及执行性能，限制规则如下：


**表2 限制规则**

| 接口类型 | 调试日志 | 调试日志 | 调试日志 | 调试日志 | 运行日志 | 运行日志 |
| --- | --- | --- | --- | --- | --- | --- |
| 级别 | debug | info | warn | error | run\_info | run\_error |
| DEBUG | 不限流 | 不限流 | 不限流 | 不限流 | 50 / 400 | 50 / 400 |
| INFO | 不打印 | 100 / 1000 | 100 / 1000 | 100 / 1000 | 100 / 1000 | 100 / 1000 |
| WARN | 不打印 | 不打印 | 50 / 400 | 50 / 400 | 50 / 400 | 50 / 400 |
| ERROR | 不打印 | 不打印 | 不打印 | 50 / 400 | 50 / 400 | 50 / 400 |


说明：每个独立进程A条/秒，累积上限B，上表中显示为[A/B]，累积上限是指一段时间进程不打印日志后，最多瞬时可输出的日志。
