【问题标题】:Struggling to get logfile output in PySpark努力在 PySpark 中获取日志文件输出
【发布时间】:2016-11-09 15:55:26
【问题描述】:

按照这里的问题: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.....")

【问题讨论】:

    标签: python logging apache-spark


    【解决方案1】:

    在我的配置中工作:

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

    【讨论】:

      【解决方案2】:

      所有输出到日志文件并从 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上不会有任何信息)

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

      祝编程愉快!!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 2017-12-10
        • 2021-11-26
        • 2022-12-22
        • 2023-04-09
        相关资源
        最近更新 更多