Snowflake Scripting에서 메시지 로깅하기¶
Snowflake SYSTEM$LOG, SYSTEM$LOG_<수준>(Snowflake Scripting의 경우) 함수를 사용하여 Snowflake Scripting으로 작성된 함수 또는 프로시저 처리기의 메시지를 로깅할 수 있습니다. 로그 항목을 저장하도록 이벤트 테이블을 설정하면 Snowflake가 처리기 코드에서 생성된 로그 항목을 테이블에 저장합니다.
코드에서 로깅하기 전에 원하는 메시지가 이벤트 테이블에 저장되도록 로깅 수준을 설정했는지 확인합니다. 자세한 내용은 로깅, 메트릭 및 추적을 위한 수준 설정하기 섹션을 참조하십시오.
참고
메시지 로깅을 시작하려면 먼저 이벤트 테이블을 설정해야 합니다. 자세한 내용은 이벤트 테이블 개요 섹션을 참조하십시오.
이벤트 테이블에서 SELECT 명령을 실행하여 로그 메시지에 액세스할 수 있습니다. 자세한 내용은 로그 메시지 보기 섹션을 참조하십시오.
Snowflake에서 로깅 설정 및 메시지 검색에 대한 일반적인 정보는 함수 및 프로시저의 메시지 로깅하기 섹션을 참조하십시오.
Snowflake Scripting의 예¶
다음 예제의 코드에서는 SYSTEM$LOG 함수를 사용하여 지원되는 각 수준에서 메시지를 로깅합니다. 참고로, 입력 행을 처리하는 코드에서 로깅된 메시지는 처리기에서 처리한 모든 행에 대해 로깅됩니다. 처리기가 큰 테이블에서 실행되면 이벤트 테이블에 많은 수의 메시지가 생성될 수 있습니다.
-- The following calls are equivalent.
-- Both log information-level messages.
SYSTEM$LOG('info', 'Information-level message');
SYSTEM$LOG_INFO('Information-level message');
-- The following calls are equivalent.
-- Both log error messages.
SYSTEM$LOG('error', 'Error message');
SYSTEM$LOG_ERROR('Error message');
-- The following calls are equivalent.
-- Both log warning messages.
SYSTEM$LOG('warning', 'Warning message');
SYSTEM$LOG_WARN('Warning message');
-- The following calls are equivalent.
-- Both log debug messages.
SYSTEM$LOG('debug', 'Debug message');
SYSTEM$LOG_DEBUG('Debug message');
-- The following calls are equivalent.
-- Both log trace messages.
SYSTEM$LOG('trace', 'Trace message');
SYSTEM$LOG_TRACE('Trace message');
-- The following calls are equivalent.
-- Both log fatal messages.
SYSTEM$LOG('fatal', 'Fatal message');
SYSTEM$LOG_FATAL('Fatal message');
블록 및 하위 작업에 대한 로그 메시지를 자동으로 추가하기¶
Snowflake Scripting 저장 프로시저의 실행에 대한 다음과 같은 추가 정보를 자동으로 로그할 수 있습니다.
Snowflake Scripting 블록의 BEGIN/END.
하위 작업 요청의 BEGIN/END.
자동 로그는 다음과 같은 사용 사례를 위한 것입니다.
저장 프로시저의 본문을 수정하지 않고 추가 로그 메시지를 생성하려고 합니다.
저장 프로시저 실행에 대한 포괄적인 정보를 원합니다.
저장 프로시저 실행에 대한 가시성을 높여 프로시저에 로그 코드를 수동으로 추가하지 않고도 개발 및 디버깅을 더 쉽게 할 수 있도록 하려는 것입니다.
저장 프로시저에 대해 이러한 Snowflake Scripting 메시지를 자동으로 로그하려면 ALTER PROCEDURE 명령을 사용하여 저장 프로시저의 AUTO_EVENT_LOGGING 매개 변수를 LOGGING
또는 ALL
로 설정합니다. 이 매개 변수를 ALL
로 설정하면 추가 추적 이벤트 도 저장 프로시저에 대해 자동으로 전송됩니다.
중요
유효 LOG_LEVEL 이 TRACE
로 설정된 경우에만 추가 정보가 이벤트 테이블에 추가됩니다. 자세한 내용은 로깅, 메트릭 및 추적을 위한 수준 설정하기 섹션을 참조하십시오.
예를 들어 간단한 테이블을 만들고 데이터를 삽입합니다.
CREATE OR REPLACE TABLE test_auto_event_logging (id INTEGER, num NUMBER(12, 2));
INSERT INTO test_auto_event_logging (id, num) VALUES
(1, 11.11),
(2, 22.22);
다음으로 auto_event_logging_sp
이라는 저장 프로시저를 만듭니다. 이 샘플 저장 프로시저는 테이블 행을 업데이트한 다음 테이블을 쿼리합니다.
CREATE OR REPLACE PROCEDURE auto_event_logging_sp(
table_name VARCHAR,
id_val INTEGER,
num_val NUMBER(12, 2))
RETURNS TABLE()
LANGUAGE SQL
AS
$$
BEGIN
UPDATE IDENTIFIER(:table_name)
SET num = :num_val
WHERE id = :id_val;
LET res RESULTSET := (SELECT * FROM IDENTIFIER(:table_name) ORDER BY id);
RETURN TABLE(res);
EXCEPTION
WHEN statement_error THEN
res := (SELECT :sqlcode sql_code, :sqlerrm error_message, :sqlstate sql_state);
RETURN TABLE(res);
END;
$$
;
다음 예에서는 저장 프로시저의 AUTO_EVENT_LOGGING 매개 변수를 설정합니다.
ALTER PROCEDURE auto_event_logging_sp(VARCHAR, INTEGER, NUMBER)
SET AUTO_EVENT_LOGGING = 'LOGGING';
ALTER PROCEDURE auto_event_logging_sp(VARCHAR, INTEGER, NUMBER)
SET AUTO_EVENT_LOGGING = 'ALL';
저장 프로시저를 호출합니다.
CALL auto_event_logging_sp('test_auto_event_logging', 2, 33.33);
+----+-------+
| ID | NUM |
|----+-------|
| 1 | 11.11 |
| 2 | 33.33 |
+----+-------+
auto_event_logging_sp
이라는 저장 프로시저에 의해 로그된 메시지에 대해 이벤트 테이블을 쿼리합니다. 각 메시지에 대해 메시지의 타임스탬프, 로그 수준 및 텍스트를 인쇄합니다.
SELECT
TIMESTAMP as time,
RECORD['severity_text'] as severity,
VALUE as message
FROM
my_db.public.my_events
WHERE
RESOURCE_ATTRIBUTES['snow.executable.name'] LIKE '%AUTO_EVENT_LOGGING_SP%'
AND RECORD_TYPE = 'LOG';
+-------------------------+----------+----------------------------------+
| TIME | SEVERITY | MESSAGE |
|-------------------------+----------+----------------------------------|
| 2024-10-25 20:42:24.134 | "TRACE" | "Entering outer block at line 2" |
| 2024-10-25 20:42:24.135 | "TRACE" | "Entering block at line 2" |
| 2024-10-25 20:42:24.135 | "TRACE" | "Starting child job" |
| 2024-10-25 20:42:24.633 | "TRACE" | "Ending child job" |
| 2024-10-25 20:42:24.633 | "TRACE" | "Starting child job" |
| 2024-10-25 20:42:24.721 | "TRACE" | "Ending child job" |
| 2024-10-25 20:42:24.721 | "TRACE" | "Exiting with return at line 7" |
+-------------------------+----------+----------------------------------+