如何在Databricks的Scala代码中添加自定义日志输出?
Databricks Scala Notebook 自定义日志不输出到Log4j的解决方法
核心原因
Databricks集群默认Log4j配置仅输出INFO及以上级别的日志,且未配置自定义Logger的输出规则,你代码中使用的debug级别日志默认会被拦截。
具体解决方案
1. 调整日志级别输出
你可以选择调高日志输出级别,或者临时修改自定义Logger的级别允许debug日志输出,代码示例如下:
import com.typesafe.scalalogging.Logger import org.slf4j.LoggerFactory import org.apache.log4j.{Level, Logger => Log4jLogger} // 为自定义Logger开启DEBUG级别权限 Log4jLogger.getLogger("TheLoggerName").setLevel(Level.DEBUG) val logger = Logger(LoggerFactory.getLogger("TheLoggerName")) logger.debug("****************************************************************** Useful message....") // 不想调整级别的话,直接使用INFO级别输出也可以,默认不会被拦截 logger.info("****************************************************************** 普通信息级别的日志")
2. 查看日志的正确位置
Notebook中直接运行的代码默认在Driver节点执行,对应的Log4j日志可以通过两个路径查看:
- 集群UI的驱动程序日志标签下的Log4j分类
- 直接在Notebook中执行命令读取落盘日志文件:
%sh grep "Useful message" /databricks/driver/logs/log4j-active.log
3. 适配Executor日志输出
如果你的日志打印逻辑写在会分发到Executor执行的算子(如map、foreach等)内部,需要在集群Spark配置中添加如下参数,重启集群后生效:
spark.executor.extraJavaOptions -Dlog4j.logger.TheLoggerName=DEBUG
内容的提问来源于stack exchange,提问作者boom_clap
相关产品推荐
相关产品推荐

