在java/python项目中使用py4j将Log4j连接到ipython笔记本stderr

2024-04-19 12:38:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个项目,使用java、scala和apachespark对基因组数据进行分布式计算。使用py4j并模仿PySpark模型,我们公开了一个pythonapi,它调用JVM。我们的目标是将这种模式引入到jupyter笔记本电脑中,到目前为止,它非常简单,但有一个挥之不去的问题:日志记录。在

问题

我们(和Spark)使用log4j将日志消息写入日志文件和stderr。这个stderr是java进程的stderr,所以如果我从jupyter笔记本中运行两个命令:

print('foo')
info('bar')  # calls log4j logger.info in JVM

我看到'foo'被写入jupyter单元,但是'bar'被写入运行jupyter进程的终端。在

我的目标

将log4j连接到jupyter笔记本,以便log4j消息被写入jupyter单元,而不是终端。在

我所尝试的

javalog4j.Consoleappender正在向javastderr写入数据。所以,我们需要通过jupyter路由javastderr,对吗?这可能涉及到将System.setOut(...)与一个连接到jupyter进程的PrintStream对象一起使用,但我还不确定如何做到这一点。在


Tags: 数据info终端消息目标foo进程stderr