Registro de mensagens em Scala¶
É possível registrar mensagens de um manipulador de função ou procedimento escrito em Scala usando a API SLF4J. Quando você configura uma tabela de eventos para armazenar entradas de log, o Snowflake armazena na tabela as entradas de log geradas pelo seu código do manipulador.
Você pode usar a API SLF4J incluída na biblioteca Snowflake Telemetry incluída no Snowflake. Para fazer isso, inclua o seguinte valor na cláusula PACKAGES ao criar a função ou o procedimento: com.snowflake:telemetry:latest
.
Para obter mais informações sobre como incluir a biblioteca de telemetria ao empacotar seu código com Maven, consulte Configurando seu ambiente Java e Scala para usar a classe de telemetria.
Nota
O uso da biblioteca de telemetria do Snowflake adiciona outras bibliotecas ao ambiente de execução de sua função ou procedimento. Para obter mais informações, consulte Dependências do pacote de telemetria do Snowflake.
Nota
SLF4J não oferece suporte ao registro de mensagens no nível FATAL
. Para manipuladores escritos em Java ou Scala, o nível FATAL
é tratado como o nível ERROR
.
Por exemplo, se você definir o parâmetro LOG_LEVEL
como FATAL
, as mensagens de nível ERROR
de um manipulador Java ou Scala serão ingeridas.
Para obter informações gerais sobre a configuração de registro e recuperação de mensagens no Snowflake, consulte Registro de mensagens de funções e procedimentos.
Antes de fazer o registro a partir do código, você deve:
Configurar uma tabela de eventos para coletar mensagens registradas do código do manipulador.
Para obter mais informações, consulte Configuração de uma tabela de eventos.
Certifique-se de que o nível de registro em log esteja definido para que as mensagens desejadas sejam armazenadas na tabela de eventos.
Para obter mais informações, consulte Configuração do nível de registro.
Exemplo de Scala¶
O código no exemplo a seguir importa referências da biblioteca Snowflake Telemetry e, a partir dela, obtém um agente de log. Ele registra uma mensagem no nível INFO
. Ele também registra um erro para uma exceção.
Para obter mais informações sobre os métodos que podem ser usados para registrar em níveis específicos, consulte métodos SLF4J.
CREATE OR REPLACE PROCEDURE do_logging()
RETURNS VARCHAR
LANGUAGE SCALA
RUNTIME_VERSION = '2.12'
PACKAGES=('com.snowflake:snowpark:latest', 'com.snowflake:telemetry:latest')
HANDLER = 'ScalaLoggingHandler.doThings'
AS
$$
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import com.snowflake.snowpark.Session
class ScalaLoggingHandler {
private val logger: Logger = LoggerFactory.getLogger(getClass)
logger.info("Logging from within the Scala constructor.")
def doThings(session: Session): String = {
logger.info("Logging from Scala method start.")
try {
throwException
} catch {
case e: Exception => logger.error("Logging an error from Scala handler: " + e.getMessage())
return "ERROR"
}
return "SUCCESS"
}
// Simulate a thrown exception to catch.
@throws(classOf[Exception])
private def throwException = {
throw new Exception("Something went wrong.")
}
}
$$
;
Você pode acessar as mensagens de log executando um comando SELECT na tabela de eventos. Para obter mais informações, consulte Acesso a dados de mensagens registradas.
O código no exemplo a seguir consulta a tabela de eventos onde as mensagens de log estão armazenadas. A consulta informa sobre a gravidade e a mensagem de cada entrada de log da classe do manipulador.
SET event_table_name='my_db.public.my_event_table';
SELECT
RECORD['severity_text'] AS SEVERITY,
VALUE AS MESSAGE
FROM
IDENTIFIER($event_table_name)
WHERE
SCOPE['name'] = 'ScalaLoggingHandler'
AND RECORD_TYPE = 'LOG';
O exemplo anterior gera a seguinte saída.
---------------------------------------------------------------------------
| 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." |
---------------------------------------------------------------------------