来自函数和过程的日志记录消息¶
您可以记录来自存储过程、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.")
开始使用¶
要从处理程序代码开始记录,请按照下列高级步骤操作:
-
Snowflake 将使用事件表,存储从处理程序代码记录的消息。事件表包含 :doc:` Snowflake 预定义 </developer-guide/logging-tracing/event-table-columns>` 的列。
熟悉针对要使用的处理程序语言的日志记录 API。
请参阅 支持的语言,了解处理程序语言的列表,然后查看 有关如何通过您的语言记录的内容。
将日志记录代码添加到处理程序。
了解如何从事件表中 检索日志记录数据。
日志消息的级别¶
您可以设置日志级别,从而管理事件表中存储的日志事件数据的级别。在日志记录之前,请使用此设置来确保获取日志消息的严重性。
有关更多信息,请参阅 设置日志级别。
支持的语言¶
您可以记录用以下语言编写的代码中的消息,包括使用 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 |
|
JavaScript |
Snowflake JavaScript API |
|
Python |
标准库 |
|
Scala |
SLF4J API |
|
Snowflake Scripting |
Snowflake SYSTEM$LOG 函数。 |
日志消息访问¶
您可以对事件表执行 SELECT 命令,访问事件表中存储的日志消息。有关更多信息,请参阅 访问已记录消息的数据。