努力在PySpark中获取日志文件输出

时间:2016-07-07 10:52:54

标签: python logging apache-spark

在这里提出问题:How do I log from my Python Spark script,我一直在努力争取:

a)所有输出到日志文件中。 b)从pyspark

写出日志文件

对于a)我对配置文件使用以下更改:

# Set everything to be logged to the console
log4j.rootCategory=ALL, file
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/home/xxx/spark-1.6.1/logging.log
log4j.appender.file.MaxFileSize=5000MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

这产生输出,现在为b)我想将自己的输入添加到从pyspark记录,但我找不到写入日志的任何输出。这是我正在使用的代码:

import logging
logger = logging.getLogger('py4j')
#print(logger.handlers)
sh = logging.StreamHandler(sys.stdout)
sh.setLevel(logging.DEBUG)
logger.addHandler(sh)
logger.info("TESTING.....")

我可以在日志文件中找到输出,但没有“TESTING ....”我也尝试使用现有的记录器流,但这也不起作用。

import logging
logger = logging.getLogger('py4j')
logger.info("TESTING.....")

2 个答案:

答案 0 :(得分:3)

在我的配置中工作:

log4jLogger = sc._jvm.org.apache.log4j
LOGGER = log4jLogger.LogManager.getLogger(__name__)
LOGGER.info("Hello logger...")

答案 1 :(得分:0)

全部输出到日志文件并从pyspark写入日志文件

import os
import sys
import logging
import logging.handlers

log = logging.getLogger(__name_)

handler = logging.FileHandler("spam.log")
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
log.addHandler(handler)
sys.stderr.write = log.error 
sys.stdout.write = log.info 

(将在“ spam.log”中的每个错误记录在同一目录中,控制台/ stdout上将没有任何内容)

(将“ spam.log”中的所有信息记录在同一目录中,控制台/ stdout上将没有任何内容)

要在两个文件中以及控制台中打印输出错误/信息,请删除以上两行。

快乐的编码欢呼!