从未处理的异常获取消息¶
默认情况下,当您 设置事件表 后,Snowflake 会自动记录事件表中过程和 UDF 处理程序中未处理的异常。获取这些消息不需要添加特定于日志记录或跟踪的处理程序代码。您可禁用此功能,这样就不会自动记录未处理的异常。
重要
错误消息可能包含敏感信息。如果不希望在事件表中获取潜在的敏感信息,请考虑禁用此功能。要了解更多信息,请参阅 保护敏感数据。
备注
该功能目前仅支持用 Java 或 Python 编写的处理程序代码。
配置日志记录和跟踪以获取未处理的异常¶
设置日志或跟踪级别,以便 Snowflake 获取未处理异常的条目。您可以以日志条目和/或跟踪事件条目的形式获取条目。
为未处理的异常获取的数据¶
您可以以日志条目和/或跟踪事件的形式获取消息数据。获取的数据在日志和跟踪事件条目之间会有所不同。
日志条目中获取的数据¶
默认情况下,对于过程和 UDF 处理程序中未处理的异常,Snowflake 会在事件表中记录以下内容:
列 |
数据 |
---|---|
|
|
对于未处理的异常,记录以下属性。
|
|
字符串 |
示例¶
以下示例中的代码在事件表中查询以下数据:为 UDF 处理程序中未处理的异常记录的日志数据。
有关在事件表中查询日志数据的更多信息,请参阅 访问已记录消息的数据。
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['severity_text'] AS severity,
RECORD_ATTRIBUTES['exception.message'] AS error_message,
RECORD_ATTRIBUTES['exception.type'] AS exception_type,
RECORD_ATTRIBUTES['exception.stacktrace'] AS stacktrace
FROM
my_event_table
WHERE
RECORD_TYPE = 'LOG';
以下是来自查询的可能输出。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SEVERITY | ERROR_MESSAGE | EXCEPTION_TYPE | STACKTRACE |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| "FATAL" | "could not convert string to float: '$1,000,000.00'" | "ValueError" | "Traceback (most recent call last):\n File \"_udf_code.py\", line 6, in compute\nValueError: could not convert string to float: '$1,000,000.00'\n" |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
跟踪事件条目中获取的数据¶
默认情况下,对于过程和 UDF 处理程序中未处理的异常,Snowflake 会在事件表中记录以下内容:
列 |
数据 |
---|---|
值为 |
|
对于未处理的异常,记录以下属性。
|
示例¶
以下示例中的代码在事件表中查询以下数据:为 UDF 处理程序中未处理的异常记录的跟踪事件数据。
有关在事件表中查询跟踪事件数据的更多信息,请参阅 访问跟踪数据。
span 示例¶
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['status']['code'] AS span_status
FROM
my_event_table
WHERE
record_type = 'SPAN';
以下是来自查询的可能输出。
-----------------------
| SPAN_STATUS |
-----------------------
| "STATUS_CODE_ERROR" |
-----------------------
span 事件示例¶
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['name'] AS event_name,
RECORD_ATTRIBUTES['exception.message'] AS error_message,
RECORD_ATTRIBUTES['exception.type'] AS exception_type,
RECORD_ATTRIBUTES['exception.stacktrace'] AS stacktrace
FROM
my_event_table
WHERE
RECORD_TYPE = 'SPAN_EVENT';
以下是来自查询的可能输出。
-----------------------------------------------------------------------------------------------------------------------------------------
| EVENT_NAME | ERROR_MESSAGE | EXCEPTION_TYPE | STACKTRACE |
-----------------------------------------------------------------------------------------------------------------------------------------
| "exception" | "could not convert string to float: '$1,000,000.00'" | "ValueError" | " File \"_udf_code.py\", line 6, in compute\n" |
-----------------------------------------------------------------------------------------------------------------------------------------
保护敏感数据¶
鉴于来自未处理的异常的日志和跟踪消息可能包含敏感数据,请考虑执行以下操作来保护此类数据:
采取措施来保护敏感数据,例如执行以下操作:
将 ENABLE_UNHANDLED_EXCEPTIONS_REPORTING 参数设置为
false
,从而关闭未处理的异常日志记录。