

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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 系統檢視。日誌處理常式會在每個配量每則訊息寫入一個資料列至 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 文件中的 [Python 的記錄機能](https://docs.python.org/2.7/library/logging.html)。

下列範例會建立名為 f\$1pyerror 的函數，用來匯入 Python 記錄模組、將記錄器執行個體化，以及記錄錯誤。

```
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
```