

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# Python UDF のエラーと警告のログ記録
<a name="udf-logging-messages"></a>

Python ロギングモジュールを使用して、ユーザー定義のエラーおよび警告メッセージを UDF 内に作成できます。クエリの実行に続いて、[SVL\$1UDF\$1LOG](r_SVL_UDF_LOG.md) システムビューをクエリしてログ記録されたメッセージを取得できます。

**注記**  
UDF のログ記録はクラスターのリソースを消費し、システムのパフォーマンスに影響する場合があります。ログ記録は開発およびトラブルシューティングのためにのみ実装することをお勧めします。

クエリの実行中に、ログハンドラは、対応する関数名、ノード、およびスライスとともに、SVL\$1UDF\$1LOG システムビューにメッセージを書き込みます。ログハンドラはメッセージごと、スライスごとに 1 行を SVL\$1UDF\$1LOG に書き込みます。メッセージは 4096 バイトで切り捨てられます。UDF のログはスライスごとに 500 行に制限されます。ログがいっぱいになると、ログハンドラは古い方からメッセージを破棄し、SVL\$1UDF\$1LOG に警告メッセージを追加します。

**注記**  
Amazon Redshift の UDF ログハンドラでは、改行 ( `\n` )、パイプ ( `|` ) 文字、バックスラッシュ ( `\` ) 文字を、バックスラッシュ ( `\` ) 文字でエスケープします。

デフォルトでは、UDF ログレベルは WARNING に設定されます。ログレベルが WARNING、ERROR、および CRITICAL のメッセージがログ記録されます。重要度がより低い INFO、DEBUG、および NOTSET のメッセージは無視されます。UDF のログレベルを設定するには、Python のロガーメソッドを使用します。次の例では、ログレベルを INFO に設定します。

```
logger.setLevel(logging.INFO)
```

Python ロギングモジュールの使用の詳細については、「[Python 用ロギング機能](https://docs.python.org/2.7/library/logging.html)」を参照してください。

次の例は、Python ロギングモジュールをインポートし、ロガーをインスタンス化してエラーを記録する f\$1pyerror という関数を作成します。

```
CREATE OR REPLACE FUNCTION f_pyerror() 
RETURNS INTEGER
VOLATILE AS
$$
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.info('Your info message here') 
return 0
$$ language plpythonu;
```

次の例では、SVL\$1UDF\$1LOG をクエリして前の例でログ記録されたメッセージを表示します。

```
select funcname, node, slice, trim(message) as message 
from svl_udf_log;

  funcname  | query | node | slice |   message  
------------+-------+------+-------+------------------
  f_pyerror | 12345 |     1|     1 | Your info message here
```