访问已记录消息的数据¶
已记录消息存储在您设置为支持日志记录的事件表中。您可以通过在事件表上执行 SELECT 命令来访问已记录消息。
备注
在开始记录消息之前,必须设置事件表。有关更多信息,请参阅 设置事件表。
事件表具有一组预定义的列,用于获取有关已记录消息的信息,包括:
引入消息时的时间戳。
日志事件的作用域,例如创建日志事件的类名称。
日志事件源,包括数据库、架构、用户、仓库等。
日志的严重性级别。
日志消息。
有关事件表列的参考信息,请参阅 事件表列。
日志数据查询示例¶
以下各部分通过示例数据说明如何查询事件表以获取日志消息数据。
收集的数据¶
在为两个单独的处理程序(一个用 Scala 编写,另一个用 Python 编写)获取日志消息后,以下示例中的输出显示事件表中选定的列子集的内容。下面示例的输出显示了两个不同处理程序(一个用 Scala 编写,另一个用 Python 编写)获取日志消息后事件表中所选列的内容。
有关收集日志消息数据的事件表列的参考信息,请参阅 日志数据。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| TIMESTAMP | SCOPE | RESOURCE_ATTRIBUTES | RECORD_TYPE | RECORD | VALUE |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" } | **See excerpt below** | LOG | { "severity_text": "INFO" } | Logging from Python module. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" } | | LOG | { "severity_text": "INFO" } | Logging from Python function start. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" } | | LOG | { "severity_text": "ERROR" } | Logging an error from Python handler. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:55 | { "name": "ScalaLoggingHandler" } | | LOG | { "severity_text": "INFO" } | Logging from within the Scala constructor. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:56 | { "name": "ScalaLoggingHandler" } | | LOG | { "severity_text": "INFO" } | Logging from Scala method start. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:56 | { "name": "ScalaLoggingHandler" } | | LOG | { "severity_text": "ERROR" } | Logging an error from Scala handler: Something went wrong. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
RESOURCE_ATTRIBUTES 摘录
以下 JSON 摘录包含一个 RESOURCE_ATTRIBUTES 列属性,其数据包含在前面的输出中。这些摘录后面的 SELECT 查询代码选择来自此属性的值。
RESOURCE_ATTRIBUTES 列包含有关事件来源的数据。有关参考信息,请参阅 RESOURCE_ATTRIBUTES 列。
{
...
"snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
...
}
{
...
"snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
...
}
{
...
"snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
...
}
{
...
"snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
...
}
{
...
"snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
...
}
{
...
"snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
...
}
使用 SELECT 语句查询¶
查询消息数据时,可以使用 括号表示法 选择列中的属性值,形式如下:
COLUMN_NAME['attribute_name']
以下示例中的代码查询上表,目的是隔离与 Python 处理程序的日志消息相关的数据。查询选择日志条目严重性的 severity_text
属性。它选择日志消息的 VALUE
列内容。
包含处理程序的过程称为 do_logging
。请注意,必须以全部大写字母指定过程名称,查询才能正常工作。
SET event_table_name='my_db.public.my_event_table';
SELECT
TIMESTAMP as time,
RESOURCE_ATTRIBUTES['snow.executable.name'] as executable,
RECORD['severity_text'] as severity,
VALUE as message
FROM
IDENTIFIER($event_table_name)
WHERE
SCOPE['name'] = 'python_logger'
AND RESOURCE_ATTRIBUTES['snow.executable.name'] LIKE '%DO_LOGGING%'
AND RECORD_TYPE = 'LOG';
查询结果¶
以下示例中的输出说明了查询的结果。
----------------------------------------------------------------------------------------------------------------
| TIME | EXECUTABLE | SEVERITY | MESSAGE |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "INFO" | "Logging from Python module." |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "INFO" | "Logging from Python function start." |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "ERROR" | "Logging an error from Python handler" |
----------------------------------------------------------------------------------------------------------------