如何正确格式化pyspark日志文件

时间:2020-08-29 07:26:41

标签: python python-2.7 logging cmd pyspark

我正在尝试在python中实现日志记录。这是mycode。我正在尝试在同一日志文件中获取控制台输出。我正在使用python 2.7

def cal_val(i):
    logger.info("added valu is {}".format(i+1))
if __name__ == "__main__":
    logging.basicConfig(filename="sample1.log",format='%(asctime)s %(levelname)-8s %(message)s',level=logging.INFO,datefmt='%Y-%m-%d_%H:%M:%S')
    # Creating an object
    logger = logging.getLogger()
    for i in range(1,5):
        logger.info("First valu is {}".format(i))
        cal_val(i)
    shecmd="spark-submit C:\PycharmProjects\\Finaltst\\from_dt_to_dt.py --executor-memory 5G --total-executor-cores 2"
    logger.info("Executing shell command------>")
    logger.info(shecmd)
    proc=subprocess.Popen(shecmd,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,shell=True)
    for line in proc.stdout:
        logger.info(line)

现在我在日志文件中获取结果,但是格式不正确 enter image description here

正如您在高亮部分以及我在代码中提供的logger所看到的那样,它正在将logger用作控制台,并导致如下所示的行格式不正确。它还在行首添加b'和\ r,\ n在行尾

2020-08-29_12:19:23 INFO     b'20/08/29 12:19:23 INFO SecurityManager: Changing modify acls to: System\r\n'

如何避免这种情况。我想以下面的方式写日志 enter image description here

有什么方法可以吸引下一行

for line in proc.stdout:
        logger.info(line)

我可以编写诸如print()之类的东西,它只会在同一日志文件中打印控制台输出?

1 个答案:

答案 0 :(得分:0)

由于从Popen stdout获得的“行”是字节类型,因此需要将其转换为字符串类型。

for line in proc.stdout:
    logger.info(line.decode())