数据砖无法解析自定义日志附加程序

时间:2020-06-05 14:48:36

标签: log4j azure-databricks

我正在尝试将日志从数据块群集发送到LogDNA,为此我确实有一个自定义的附加程序,该附加程序可以很好地与单元测试结合使用,因为我可以看到日志记录。但是现在,当我尝试按照this的指导将其与Databricks集成时,databricks无法解析classPath。我正在加载到集群中的初始化脚本如下:

#!/usr/bin/env bash

echo "Executing on Driver: $DB_IS_DRIVER"
if [[ $DB_IS_DRIVER = "TRUE" ]]; then
LOG4J_PATH="/home/ubuntu/databricks/spark/dbconf/log4j/driver/log4j.properties"
else
LOG4J_PATH="/home/ubuntu/databricks/spark/dbconf/log4j/executor/log4j.properties"
fi
echo "log4j path : $LOG4J_PATH"
echo "log4j.rootLogger=INFO, LogDNAAppender, console" >> ${LOG4J_PATH}
echo "log4j.appender.LogDNAAppender=tools.logdna.util.LogDNAAppender" >> ${LOG4J_PATH}
echo "log4j.appender.LogDNAAppender.name=LogDNAAppender" >> ${LOG4J_PATH}
// and then properties associated with the appender

此脚本(到init脚本)和依赖项已成功上传到集群,但是在运行时,错误如下:

log4j:ERROR Could not instantiate class [tools.logdna.util.LogDNAAppender].
java.lang.ClassNotFoundException: tools.logdna.util.LogDNAAppender

我有什么想念的或者需要做的吗?

2 个答案:

答案 0 :(得分:0)

logback-logdna添加到Databricks的类路径中,这将有助于Classloader找到并加载LogDNAAppender类。

Download logback-logdna

答案 1 :(得分:0)

这里的问题是,我将依赖项上载到了databricks集群中的库,这对我所有情况都足够了,直到现在,但显然不适合init脚本,它是主机中的/ databricks / jars(没有那些在运行时中导致ClassNotFoundException的jars)。解决方法是将这些罐子放在正确的文件夹中,即/ databricks / jars。