我在python中有一个主脚本和其他模块文件,它们现在都在一个文件夹中。 我现在正试图将日志消息注入到任何地方,但是我并不真正理解python的日志层次结构,尽管我一直在阅读它。在
所以我来检查一下,因为我的测试结果是这样的:
如果我在我的主模块上配置一个记录器,我导入到这个主模块的模块的日志记录会自动附加到它后面,只要我用logging.getLogger(__name__)
调用记录器,对吗?所以导入的模块不必在子文件夹或其他地方?
我在脚本中使用PySpark,因此按照Spark>;2.0中的建议创建一个Spark会话,并在我的模块中使用它。但是,我希望Spark logger的配置与脚本的logger类似,并将其消息与模块的logger一起输出到一个文件或我配置的任何处理程序中。
直到现在我才发现我能把火花记录器弄通
log4jLogger = sc._jvm.org.apache.log4j
LOGGER = log4jLogger.LogManager.getLogger(__name__)
但我不想在日志中使用log4j,相反。我希望Spark的记录器被附加到我的记录器中,这将是父记录器。在
另外,即使我使用了Spark的log4j,我也不想通过使用conf目录中的静态log4j.properties文件来更改整个Spark的日志配置,但是我希望根据调用脚本进行日志记录。在
有办法吗?如果没有,那么将这两个记录器组合成一个配置和输出的最佳方法是什么?在
配置spark将日志转发到python logger是不可能的-python和sparkjvm是分开的进程。在
但是,正如您所注意到的,您可以使用py4j网关将事件从pyspark记录到log4j(仅在驱动程序上)。您的log4j配置不需要对所有脚本都是静态的,您可以创建许多log4j配置并在运行时加载它们:
如果您使用
^{pr2}$yarn-cluster
在YARN内部运行应用程序,请记住使用files
发送配置文件,例如:相关问题 更多 >
编程相关推荐