로그 수준 설정하기

이벤트 테이블에 저장하려는 로그 메시지의 심각도 수준을 설정할 수 있습니다. 이 작업을 하려면 LOG_LEVEL 매개 변수를 지정된 수준으로 설정하십시오. 이 수준과 더 심각한 수준의 메시지가 이벤트 테이블로 수집됩니다.

LOG_LEVEL은 오브젝트 매개 변수 이자 세션 매개 변수 인데, 이는 곧 오브젝트와 세션에 대한 매개 변수를 설정할 수 있다는 의미입니다.

참고

처리기 코드를 사용하면 처리기가 Python으로 작성된 경우 이 항목에 설명된 대로 SQL로 설정한 로그 수준을 재정의할 수 있습니다. 자세한 내용은 Python으로 로그 임계값 수준 재정의하기 섹션을 참조하십시오.

로그 수준 이해하기

LOG_LEVEL 매개 변수를 지정된 수준으로 설정하면 지정된 수준의 메시지와 더 심각한 수준의 메시지만 수집되어 이벤트 테이블에서 사용할 수 있습니다.

예를 들어 LOG_LEVEL 매개 변수를 WARN으로 설정하면 WARN, ERROR 및 FATAL 수준의 메시지가 이벤트 테이블에 캡처됩니다.

LOG_LEVEL 값 목록과 수집된 메시지의 해당 수준은 LOG_LEVEL 섹션을 참조하십시오.

오브젝트에 대한 로그 수준 설정하기

다음 오브젝트에 대한 로그 수준을 설정할 수 있습니다.

  • 저장 프로시저

  • 사용자 정의 함수(UDF) 또는 사용자 정의 테이블 함수(UDTF)

  • 프로시저와 함수를 포함하는 데이터베이스 또는 스키마

오브젝트에 대한 로그 수준을 설정하려면 다음을 수행하십시오.

  1. 오브젝트에 대한 로그 수준을 설정할 권한이 있는지 확인합니다.

    다음 권한이 부여되거나 상속되는 역할을 사용해야 합니다.

    • 계정에 대한 MODIFY LOG LEVEL 전역 권한

    • LOG_LEVEL을 설정하려는 오브젝트에 대한 MODIFY 권한

    예를 들어 계정에서 모든 데이터베이스, 스키마, 저장 프로시저, UDF 또는 UDTF(central_log_admin 역할에 다른 권한이 없는 것까지도 포함)에 대한 로그 수준을 설정할 권한을 central_log_admin 역할에 부여하려면 다음 문을 실행하십시오.

    GRANT MODIFY LOG LEVEL ON ACCOUNT TO ROLE central_log_admin;
    
    Copy

    저장 프로시저 또는 UDF에서 로그 수준을 설정하려면 central_log_admin 역할에 저장 프로시저 또는 UDF을 포함하는 데이터베이스/스키마에 대한 USAGE 권한도 가지고 있어야 합니다.

    MODIFY LOG LEVEL 및 USAGE 권한에 대한 자세한 내용은 액세스 제어 권한 섹션을 참조하십시오.

  2. ALTER <오브젝트> 명령을 사용하여 오브젝트에 대한 LOG_LEVEL 매개 변수를 설정합니다.

    사용할 수 있는 수준의 목록은 LOG_LEVEL 매개 변수를 참조하십시오. 앞서 언급했듯이, 지정된 수준의 메시지와 더 심각한 수준의 메시지가 활성 이벤트 테이블로 수집됩니다.

    예를 들어 특정 UDF에 대한 로그 수준을 설정하려면 ALTER FUNCTION 을 사용하여 해당 UDF의 LOG_LEVEL 매개 변수를 설정하십시오. 또 다른 예로, 데이터베이스의 모든 함수와 프로시저에 대한 기본 로그 수준을 설정하려면 ALTER DATABASE 를 사용하여 해당 데이터베이스에 대한 LOG_LEVEL 매개 변수를 설정하십시오.

    다음 예제에서는 데이터베이스 db 의 모든 함수와 프로시저에 대해 로그 수준을 ERROR로 설정합니다. 이 예제에서는 UDF f1(int) 에 대해 이 수준을 WARN으로 재정의합니다.

    USE ROLE central_log_admin;
    
    -- Set the log levels on a database and UDF.
    ALTER DATABASE db1 SET LOG_LEVEL = ERROR;
    ALTER FUNCTION f1(int) SET LOG_LEVEL = WARN;
    
    Copy

    LOG LEVEL이 다양한 오브젝트에 설정된 경우 Snowflake가 유효 로그 수준을 결정하는 자세한 방법은 Snowflake가 유효 로그 수준을 결정하는 방법 이해하기 섹션을 참조하십시오.

현재 세션에 대한 로그 수준 설정하기

현재 세션에서 이루어진 함수 및 프로시저 호출에 대한 로그 수준을 설정하려면 다음을 수행하십시오.

  1. 오브젝트에 대한 로그 수준을 설정할 권한이 있는지 확인합니다.

    계정에 대해 MODIFY SESSION LOG LEVEL 전역 권한 이 부여된 역할을 사용해야 합니다.

    예를 들어 developer_debugging 역할에 현재 세션의 로그 수준을 설정할 권한을 부여하려면 다음 문을 실행하십시오.

    GRANT MODIFY SESSION LOG LEVEL ON ACCOUNT TO ROLE developer_debugging;
    
    Copy
  2. ALTER SESSION 명령을 사용하여 현재 세션에 대한 LOG_LEVEL 매개 변수를 설정합니다.

    예:

    USE ROLE developer_debugging;
    
    -- Set the logging level to DEBUG for the current session.
    ALTER SESSION SET LOG_LEVEL = DEBUG;
    
    Copy

LOG_LEVEL 매개 변수가 현재 세션과 해당 세션에서 호출된 함수와 프로시저에 대해 서로 다른 수준으로 설정된 경우 Snowflake가 사용할 유효 로그 수준을 결정합니다. Snowflake가 유효 로그 수준을 결정하는 방법 이해하기 섹션을 참조하십시오.

Snowflake가 유효 로그 수준을 결정하는 방법 이해하기

수준의 계층 구조 를 사용하여 (오브젝트세션 모두에 대한) LOG_LEVEL 매개 변수를 재정의할 수 있습니다. 즉, 하위 수준의 오브젝트에 대해 LOG_LEVEL을 설정하여 계층 구조에서 상위 수준에 설정된 LOG_LEVEL을 재정의할 수 있습니다.

다음은 세션 및 오브젝트 LOG_LEVEL 매개 변수의 계층 구조를 설명합니다.

  • 세션 매개 변수 의 경우 계층 구조는 계정 » 사용자 » 세션입니다.

    이는 계정에 대한 매개 변수를 설정하고, 사용자에 대한 계정 수준 매개 변수를 재정의하며, 현재 세션에 대한 사용자 수준 매개 변수를 재정의할 수 있다는 뜻입니다.

  • 오브젝트 매개 변수 의 경우 계층 구조는 계정 » 데이터베이스 » 스키마 » 오브젝트입니다.

    이는 계정에 대한 매개 변수를 설정하고, 데이터베이스 또는 스키마에 대한 계정 수준 매개 변수를 재정의하며, 특정 저장 프로시저에 대한 데이터베이스 수준 또는 스키마 수준의 매개 변수와 해당 데이터베이스 또는 스키마의 UDF를 재정의할 수 있다는 뜻입니다.

예를 들어 함수의 LOG_LEVEL은 함수를 포함한 계정의 LOG_LEVEL을 재정의합니다. 계정의 LOG_LEVEL이 FATAL이고 계정에 있는 Java UDF의 LOG_LEVEL이 INFO인 경우 유효 LOG_LEVEL(계정이 아닌 함수의 수준)은 INFO입니다.

ALTER ACCOUNT SET LOG_LEVEL = FATAL;

ALTER FUNCTION MYJAVAUDF SET LOG_LEVEL = INFO;

-- The INFO log level is used because the FUNCTION MYJAVAUDF
-- is lower than the ACCOUNT in the hierarchy.
Copy

세션 매개 변수 및 오브젝트 매개 변수 계층 구조에서 모두 LOG_LEVEL이 설정된 경우 가장 자세한 LOG_LEVEL이 사용됩니다.

다음 표에는 세션과 오브젝트에 설정된 매개 변수가 사용되는 로그 수준에 미치는 영향에 대한 예가 나와 있습니다.

세션의 값

오브젝트, 스키마, 데이터베이스 또는 계정의 값

사용된 로그 수준

(설정되지 않음)

WARN

WARN

DEBUG

(설정되지 않음)

DEBUG

WARN

ERROR

WARN

INFO

DEBUG

DEBUG

(설정되지 않음)

(설정되지 않음)

OFF

예를 들어 LOG_LEVEL DEBUG는 LOG_LEVEL INFO를 재정의합니다. 세션의 LOG_LEVEL이 DEBUG이고 Java UDF의 LOG_LEVEL이 INFO인 경우 세션의 LOG_LEVEL DEBUG가 UDF의 LOG_LEVEL INFO를 재정의합니다. (DEBUG는 INFO보다 더 자세합니다.)

ALTER SESSION SET LOG_LEVEL = DEBUG;

ALTER FUNCTION MYJAVAUDF SET LOG_LEVEL = INFO;

-- The DEBUG log level is used because DEBUG is more verbose than INFO.
Copy