로그 항목을 생성할 때 키-값 페어로 사용자 고유의 특성을 추가할 수 있습니다. Snowflake는 이러한 사용자 지정 특성을 이벤트 테이블의 RECORD_ATTRIBUTES 열 에 저장합니다.
사용자 지정 특성을 추가하려면 Logger.atInfo 및 Logger.atError 같은 slf4j fluent API의 메서드를 호출합니다. 이러한 방법을 사용하여 로그 항목에 키-값 페어를 설정합니다. 각각은 로그 메시지를 설정하는 데 사용할 수 있는 org.slf4j.spi.LoggingEventBuilder 를 반환합니다.
다음 예제의 코드는 이벤트 테이블의 VALUE 열에 “특성 포함 기록” 메시지를 기록합니다. 또한 RECORD_ATTRIBUTES 열에 사용자 지정 특성을 추가합니다.
CREATEORREPLACEPROCEDUREdo_logging_scala()RETURNSVARCHARLANGUAGESCALARUNTIME_VERSION='2.12'PACKAGES=('com.snowflake:telemetry:latest','com.snowflake:snowpark_2.12:latest')HANDLER='ScalaLoggingHandler.doThings'AS$$importorg.slf4j.Loggerimportorg.slf4j.LoggerFactoryimportcom.snowflake.snowpark.SessionclassScalaLoggingHandler{privatevallogger:Logger=LoggerFactory.getLogger(getClass)defdoThings(session:Session):String={logger.atInfo().addKeyValue("custom1","value1").setMessage("Logging with attributes").log();return"SUCCESS"}}$$;
CREATEORREPLACEPROCEDUREdo_logging_scala()RETURNSVARCHARLANGUAGESCALARUNTIME_VERSION='2.13'PACKAGES=('com.snowflake:telemetry:latest','com.snowflake:snowpark_2.13:latest')HANDLER='ScalaLoggingHandler.doThings'AS$$importorg.slf4j.Loggerimportorg.slf4j.LoggerFactoryimportcom.snowflake.snowpark.SessionclassScalaLoggingHandler{privatevallogger:Logger=LoggerFactory.getLogger(getClass)defdoThings(session:Session):String={logger.atInfo().addKeyValue("custom1","value1").setMessage("Logging with attributes").log();return"SUCCESS"}}$$;
이 Logger.atInfo 호출의 출력은 이벤트 테이블에 다음과 같이 표시됩니다. RECORD_ATTRIBUTES 열에는 Snowflake가 자동으로 추가하는 특성이 포함됩니다.
다음 예제 가져오기의 코드는 Snowflake 원격 분석 라이브러리를 참조하고 이 라이브러리에서 로거를 가져옵니다. INFO 수준에서 메시지를 로깅합니다. 또한 예외에 대한 오류를 로깅합니다.
특정 수준에서 로깅하는 데 사용할 수 있는 메서드에 대한 자세한 내용은 SLF4J 메서드 를 참조하십시오.
CREATEORREPLACEPROCEDUREdo_logging()RETURNSVARCHARLANGUAGESCALARUNTIME_VERSION='2.12'PACKAGES=('com.snowflake:snowpark_2.12:latest','com.snowflake:telemetry:latest')HANDLER='ScalaLoggingHandler.doThings'AS$$importorg.slf4j.Loggerimportorg.slf4j.LoggerFactoryimportcom.snowflake.snowpark.SessionclassScalaLoggingHandler{privatevallogger:Logger=LoggerFactory.getLogger(getClass)logger.info("Logging from within the Scala constructor.")defdoThings(session:Session):String={logger.info("Logging from Scala method start.")try{throwException}catch{casee:Exception=>logger.error("Logging an error from Scala handler: "+e.getMessage())return"ERROR"}return"SUCCESS"}// Simulate a thrown exception to catch.@throws(classOf[Exception])privatedefthrowException={thrownewException("Something went wrong.")}}$$;
CREATEORREPLACEPROCEDUREdo_logging()RETURNSVARCHARLANGUAGESCALARUNTIME_VERSION='2.13'PACKAGES=('com.snowflake:snowpark_2.13:latest','com.snowflake:telemetry:latest')HANDLER='ScalaLoggingHandler.doThings'AS$$importorg.slf4j.Loggerimportorg.slf4j.LoggerFactoryimportcom.snowflake.snowpark.SessionclassScalaLoggingHandler{privatevallogger:Logger=LoggerFactory.getLogger(getClass)logger.info("Logging from within the Scala constructor.")defdoThings(session:Session):String={logger.info("Logging from Scala method start.")try{throwException}catch{casee:Exception=>logger.error("Logging an error from Scala handler: "+e.getMessage())return"ERROR"}return"SUCCESS"}// Simulate a thrown exception to catch.@throws(classOf[Exception])privatedefthrowException={thrownewException("Something went wrong.")}}$$;
이벤트 테이블에서 SELECT 명령을 실행하여 로그 메시지에 액세스할 수 있습니다. 자세한 내용은 로그 메시지 보기 섹션을 참조하십시오.
다음 예제의 코드는 로그 메시지가 저장된 이벤트 테이블을 쿼리합니다. 이 쿼리는 처리기 클래스에서 각 로그 항목의 심각도와 메시지에 대해 보고합니다.
---------------------------------------------------------------------------| SEVERITY | MESSAGE |---------------------------------------------------------------------------| "INFO" | "Logging from within the Scala constructor." |---------------------------------------------------------------------------| "INFO" | "Logging from Scala method start." |---------------------------------------------------------------------------| "ERROR" | "Logging an error from Scala handler: Something went wrong." |---------------------------------------------------------------------------