来自函数和过程的日志记录消息

您可以记录来自存储过程、UDF 或 UDTF 的消息(例如警告或错误消息),包括您使用 :doc:` Snowpark APIs ` </developer-guide/snowpark/index> 写入的消息。您可以从 :emph:` 事件表 ` (一种获取事件的预定义表,包括记录的消息)访问记录的消息。有关支持的处理程序语言的列表,请参阅 支持的语言

例如,在 Java UDF 中,您可以使用 ` SLF4J API `_ 记录消息。稍后,您可以在事件表中访问这些记录的消息。

备注

在开始记录消息之前,必须设置事件表。有关更多信息,请参阅 设置事件表

日志记录示例

以下示例中的 Python 代码导入 logging 模块、获取记录器,并在 INFO 级别记录消息。

备注

从用于处理输入行的方法记录的消息会针对 UDF 处理的 每行 进行记录。如果在大型表中执行 UDF,则可能会导致事件表中出现大量消息。

import logging

logger = logging.getLogger("mylog")

def test_logging(self):
    logger.info("This is an INFO test.")
Copy

开始使用

要从处理程序代码开始记录,请按照下列高级步骤操作:

  1. 设置事件表。

    Snowflake 将使用事件表,存储从处理程序代码记录的消息。事件表包含 :doc:` Snowflake 预定义 </developer-guide/logging-tracing/event-table-columns>` 的列。

  2. 熟悉针对要使用的处理程序语言的日志记录 API。

    请参阅 支持的语言,了解处理程序语言的列表,然后查看 有关如何通过您的语言记录的内容

  3. 将日志记录代码添加到处理程序。

  4. 了解如何从事件表中 检索日志记录数据

日志消息的级别

您可以设置日志级别,从而管理事件表中存储的日志事件数据的级别。在日志记录之前,请使用此设置来确保获取日志消息的严重性。

有关更多信息,请参阅 设置日志级别

支持的语言

您可以记录用以下语言编写的代码中的消息,包括使用 Snowpark APIs 编写处理程序代码时的消息。

语言/类型

Java

JavaScript

Python

Scala

SQL

存储过程处理程序

✔ **

Streamlit 应用程序

UDF 处理程序(标量函数)

UDTF 处理程序(表函数)

✔ *

Legend

*:

在 Snowpark 中编写的 Scala UDTF 处理程序。

**:

Snowflake Scripting 用于编写存储过程。

备注

:doc:` 外部函数中的请求和响应转换器 </sql-reference/external-functions-translators>` 不支持日志记录。

处理程序代码语言支持

要记录消息,您可以使用处理程序代码语言通用的函数。Snowflake 截获消息并将其存储在您创建的事件表中。

例如,在 Java UDF 中,您可以使用 ` SLF4J API `_ 记录消息。稍后,您可以在事件表中访问这些记录的消息。

如果您计划在发生错误时记录消息,则应从构造中记录消息,以便通过您正在使用的语言处理错误。例如,在 Java UDF 中,调用用于在处理异常的 catch 块中记录消息的方法。

下表列出了日志记录支持的处理程序语言,以及指向通过代码记录相关内容的链接。

语言

日志记录库

文档

Java

SLF4J API

在 Java 中记录消息

JavaScript

Snowflake JavaScript API snowflake 对象

JavaScript 中的日志记录消息

Python

标准库 logging 模块

在 Python 中记录消息日志

Scala

SLF4J API

使用 Scala 记录消息日志

Snowflake Scripting

Snowflake SYSTEM$LOG 函数。

Snowflake Scripting 中的日志记录消息

日志消息访问

您可以对事件表执行 SELECT 命令,访问事件表中存储的日志消息。有关更多信息,请参阅 访问已记录消息的数据

语言: 中文