在 UDF 中记录错误和警告 - Amazon Redshift

在 UDF 中记录错误和警告

您可以使用 Python 日志记录模块在 UDF 中创建用户定义的错误和警告消息。执行查询后,您可以查询 SVL_UDF_LOG 系统视图以检索记录的消息。

注意

UDF 日志记录会使用集群资源,可能会影响系统性能。我们建议仅出于开发和故障诊断目的执行日志记录。

在执行查询时,日志处理程序会向 SVL_UDF_LOG 系统视图中写入消息,以及相应的函数名称、节点和切片。日志处理程序针对每个消息、每个切片向 SVL_UDF_LOG 中写入一行。消息被截断为 4096 字节。UDF 日志被限制为每个切片 500 行。当日志已满后,日志处理程序会丢弃较旧的消息并向 SVL_UDF_LOG 中添加警告消息。

注意

Amazon Redshift UDF 日志处理程序使用反斜杠 ( \ ) 字符对换行符 ( \n )、竖线 ( | ) 字符和反斜杠 ( \ ) 字符进行转义。

默认情况下,UDF 日志级别设置为 WARNING。日志级别为 WARNING、ERROR 和 CRITICAL 的消息会被记录下来。严重性较低 (INFO、DEBUG 和 NOTSET) 的消息会被忽略。要设置 UDF 日志级别,请使用 Python 记录器方法。例如,以下代码将日志级别设置为 INFO。

logger.setLevel(logging.INFO)

有关使用 Python 日志记录模块的更多信息,请参阅 Python 文档中的 Python 的日志记录设施

以下示例创建一个名为 f_pyerror 的函数,用于导入 Python 日志记录模块、实例化记录器以及记录错误。

CREATE OR REPLACE FUNCTION f_pyerror() RETURNS INTEGER VOLATILE AS $$ import logging logger = logging.getLogger() logger.setLevel(logging.INFO) logger.info('Your info message here') return 0 $$ language plpythonu;

以下示例查询 SVL_UDF_LOG 以查看上一示例中记录的消息。

select funcname, node, slice, trim(message) as message from svl_udf_log; funcname | query | node | slice | message ------------+-------+------+-------+------------------ f_pyerror | 12345 | 1| 1 | Your info message here