로깅된 메시지 데이터에 액세스하기¶
로깅된 메시지는 로깅을 지원하도록 설정한 이벤트 테이블에 저장됩니다. 이벤트 테이블에서 SELECT 명령을 실행하여 로깅된 메시지에 액세스할 수 있습니다.
참고
메시지 로깅을 시작하려면 먼저 이벤트 테이블을 설정해야 합니다. 자세한 내용은 이벤트 테이블 설정하기 섹션을 참조하십시오.
이벤트 테이블에는 다음을 포함하여 로깅된 메시지에 대한 정보를 캡처하는 미리 정의된 열 세트가 있습니다.
메시지가 수집된 타임스탬프.
로그 이벤트가 생성된 클래스의 이름과 같은 로그 이벤트의 범위.
데이터베이스, 스키마, 사용자, 웨어하우스 등을 포함한 로그 이벤트 원본.
로그의 심각도 수준.
로그 메시지.
이벤트 테이블 열에 대한 참조 정보는 이벤트 테이블 열 섹션을 참조하십시오.
로그 데이터 쿼리 예제¶
다음 섹션에서는 예제 데이터를 사용하여 이벤트 테이블에서 로그 메시지 데이터를 쿼리하는 방법을 설명합니다.
수집된 데이터¶
다음 예제의 출력에서는 두 개의 개별 처리기(하나는 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" |
----------------------------------------------------------------------------------------------------------------