Python UDF에서 오류 및 경고 로깅 - Amazon Redshift

Python UDF에서 오류 및 경고 로깅

UDF에서 Python 로깅 모듈을 사용하여 사용자 정의 오류 및 경고 메시지를 생성할 수 있습니다. 쿼리를 실행한 후에는 SVL_UDF_LOG 시스템 뷰에 대한 쿼리를 실행하여 로그 메시지를 가져올 수도 있습니다.

참고

UDF 로깅은 클러스터 리소스를 소비하기 때문에 시스템 성능에 영향을 미칠 수도 있습니다. 따라서 로깅은 개발 및 문제 해결 목적으로만 실행하는 것이 좋습니다.

쿼리를 실행하면 로그 핸들러가 해당하는 함수 이름, 노드 및 조각과 함께 메시지를 SVL_UDF_LOG 시스템 뷰에 작성합니다. 각 조각마다 메시지별로 SVL_UDF_LOG에 작성되는 행은 1개입니다. 메시지는 4096바이트로 잘립니다. UDF 로그는 조각당 500개 행으로 제한됩니다. 그래서 로그가 가득 차면 로그 핸들러가 더욱 오래된 메시지를 삭제하고 경고 메시지를 SVL_UDF_LOG에 추가합니다.

참고

Amazon Redshift UDF 로그 핸들러는 줄 바꿈(\n), 파이프(|) 문자 및 백슬래시(\) 문자를 백슬래시(\) 문자로 이스케이프 처리합니다.

UDF 로그 레벨은 기본적으로 WARNING으로 설정됩니다. 로그 레벨이 WARNING, ERROR 및 CRITICAL인 메시지가 기록됩니다. 심각도가 INFO, DEBUG 및 NOTSET로 낮은 메시지는 무시됩니다. UDF 로그 레벨을 설정하려면 Python logger 메서드를 사용하십시오. 예를 들어 다음과 같은 메서드는 로그 레벨을 INFO로 설정됩니다.

logger.setLevel(logging.INFO)

Python 로깅 모듈의 사용에 대한 자세한 내용은 Python 설명서에서 Logging facility for Python 섹션을 참조하세요.

다음은 f_pyerror라는 이름의 함수를 생성한 다음 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_UDF_LOG에 대한 쿼리를 실행하여 이전 예에서 기록된 메시지를 확인하는 예입니다.

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