ログレベルの設定¶
イベントテーブルに格納するログメッセージの重大度レベルを設定できます。これを実行するには、 LOG_LEVEL パラメーターを指定されたレベルに設定します。このレベル(およびそれよりも重大なレベル)のメッセージはイベントテーブルにインジェストされます。
LOG_LEVEL は、 オブジェクトパラメーター と セッションパラメーター の両方です。つまり、オブジェクトとセッションにパラメーターを設定できます。
注釈
ハンドラーがPythonで記述されている場合、(このトピックで説明されているように)ハンドラーコードを使って SQL で設定したログレベルを上書きすることができます。詳細については、 Pythonを使用したログのしきい値レベルの上書き をご参照ください。
ログレベルの理解¶
LOG_LEVEL パラメーターを指定したレベルに設定すると、指定したレベルのメッセージ(およびそれよりも重大なレベルのメッセージ)のみがインジェストされ、イベントテーブルで使用できるようになります。
たとえば、 LOG_LEVEL パラメーターを WARN に設定すると、 WARN、 ERROR、および FATAL レベルのメッセージがイベントテーブルにキャプチャされます。
LOG_LEVEL
値のリストと、インジェストされるメッセージの対応するレベルについては、 LOG_LEVEL をご参照ください。
オブジェクトのログレベルの設定¶
次のオブジェクトに対してログレベルを設定できます。
ストアドプロシージャ
ユーザー定義関数(UDF)またはユーザー定義テーブル関数(UDTF)
プロシージャと関数を含むデータベースまたはスキーマ
オブジェクトのログレベルを設定するには、次を実行します。
オブジェクトのログレベルを設定する権限があることを確認します。
次の権限が付与または継承されたロールを使用する必要があります。
アカウントに対する 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;
ストアドプロシージャまたは UDF にログレベルを設定するには、
central_log_admin
ロールがストアドプロシージャまたは UDF を含むデータベース/スキーマに対する USAGE 権限も持っている必要があることに注意してください。MODIFY LOG LEVEL および USAGE 権限の詳細については、 アクセス制御権限 をご参照ください。
ALTER <オブジェクト> コマンドを使用して、オブジェクトに LOG_LEVEL パラメーターを設定します。
使用できるレベルのリストについては、 LOG_LEVEL パラメーターをご参照ください。前述したように、指定されたレベルのメッセージ(およびそれよりも重大なレベルのメッセージ)はアクティブなイベントテーブルにインジェストされます。
たとえば、特定の UDF のログレベルを設定するには、 ALTER FUNCTION を使用してその UDF の LOG_LEVEL パラメーターを設定します。別の例として、データベース内のすべての関数とプロシージャのデフォルトのログレベルを設定するには、 ALTER DATABASE を使用してそのデータベースの LOG_LEVEL パラメーターを設定します。
次の例では、データベース
db
内のすべての関数とプロシージャのログレベルを ERROR に設定します。この例では、 UDFf1(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;
LOG LEVEL がさまざまなオブジェクトに設定されている場合に、Snowflakeが有効なログレベルを決定する方法の詳細については、 Snowflakeが有効なログレベルを決定する方法の理解 をご参照ください。
現在のセッションにおけるログレベルの設定¶
現在のセッションで実行される関数およびプロシージャの呼び出しのログレベルを設定するには、次の手順を実行します。
オブジェクトのログレベルを設定する権限があることを確認します。
アカウントに対する MODIFY SESSION LOG LEVEL グローバル権限 を付与されたロールを使用する必要があります。
たとえば、現在のセッションのログレベルを設定する権限を
developer_debugging
ロールに付与するには、次のステートメントを実行します。GRANT MODIFY SESSION LOG LEVEL ON ACCOUNT TO ROLE developer_debugging;
ALTER SESSION コマンドを使用して、現在のセッションの LOG_LEVEL パラメーターを設定します。
例:
USE ROLE developer_debugging; -- Set the logging level to DEBUG for the current session. ALTER SESSION SET LOG_LEVEL = DEBUG;
現在のセッションとそのセッションで呼び出される関数およびプロシージャに対して LOG_LEVEL パラメーターが異なるレベルに設定されている場合、Snowflakeは使用する有効なログレベルを決定します。 Snowflakeが有効なログレベルを決定する方法の理解 をご参照ください。
Snowflakeが有効なログレベルを決定する方法の理解¶
レベルの階層 を使用して、 LOG_LEVEL パラメーター(オブジェクト と セッション の両方)を上書きできます。つまり、下位レベルのオブジェクトの LOG_LEVEL を設定することで、階層内の上位レベルで設定された LOG_LEVEL を上書きできます。
以下では、セッションおよびオブジェクトの LOG_LEVEL パラメーターの階層について説明します。
セッションパラメーター の場合、階層はアカウント » ユーザー » セッションです。
これは、アカウントのパラメーターを設定したり、ユーザーのアカウントレベルのパラメーターを上書きしたり、現在のセッションにおけるユーザーレベルのパラメーターを上書きしたりできることを意味します。
オブジェクトパラメーター の場合、階層はアカウント » データベース » スキーマ » オブジェクトです。
これは、アカウントのパラメーターを設定したり、データベースまたはスキーマのアカウントレベルのパラメーターを上書きしたり、そのデータベースまたはスキーマ内にある、特定のストアドプロシージャや UDFs のデータベースレベルまたはスキーマレベルのパラメーターを上書きしたりできることを意味します。
たとえば、関数の 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.
セッションパラメーター層とオブジェクトパラメーター層の両方で 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.