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');
Copy

블록 및 하위 작업에 대한 로그 메시지를 자동으로 추가하기

Snowflake Scripting 저장 프로시저의 실행에 대한 다음과 같은 추가 정보를 자동으로 로그할 수 있습니다.

  • Snowflake Scripting 블록의 BEGIN/END.

  • 하위 작업 요청의 BEGIN/END.

자동 로그는 다음과 같은 사용 사례를 위한 것입니다.

  • 저장 프로시저의 본문을 수정하지 않고 추가 로그 메시지를 생성하려고 합니다.

  • 저장 프로시저 실행에 대한 포괄적인 정보를 원합니다.

  • 저장 프로시저 실행에 대한 가시성을 높여 프로시저에 로그 코드를 수동으로 추가하지 않고도 개발 및 디버깅을 더 쉽게 할 수 있도록 하려는 것입니다.

저장 프로시저에 대해 이러한 Snowflake Scripting 메시지를 자동으로 로그하려면 ALTER PROCEDURE 명령을 사용하여 저장 프로시저의 AUTO_EVENT_LOGGING 매개 변수를 LOGGING 또는 ALL 로 설정합니다. 이 매개 변수를 ALL 로 설정하면 추가 추적 이벤트 도 저장 프로시저에 대해 자동으로 전송됩니다.

중요

유효 LOG_LEVELTRACE 로 설정된 경우에만 추가 정보가 이벤트 테이블에 추가됩니다. 자세한 내용은 로깅, 메트릭 및 추적을 위한 수준 설정하기 섹션을 참조하십시오.

예를 들어 간단한 테이블을 만들고 데이터를 삽입합니다.

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);
Copy

다음으로 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;
$$
;
Copy

다음 예에서는 저장 프로시저의 AUTO_EVENT_LOGGING 매개 변수를 설정합니다.

ALTER PROCEDURE auto_event_logging_sp(VARCHAR, INTEGER, NUMBER)
  SET AUTO_EVENT_LOGGING = 'LOGGING';
Copy
ALTER PROCEDURE auto_event_logging_sp(VARCHAR, INTEGER, NUMBER)
  SET AUTO_EVENT_LOGGING = 'ALL';
Copy

저장 프로시저를 호출합니다.

CALL auto_event_logging_sp('test_auto_event_logging', 2, 33.33);
Copy
+----+-------+
| 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';
Copy
+-------------------------+----------+----------------------------------+
| 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"  |
+-------------------------+----------+----------------------------------+
OSZAR »