在Spyder python编辑器中将控制台输出记录到日志文件的Python方法

时间:2019-06-28 15:50:58

标签: python python-3.x logging console anaconda

我使用Anaconda和Spyder作为我的python环境和编辑器。我刚刚学习了一些将简单的打印信息记录到日志文件中的非常基本的方法。但是,这似乎很不可思议。我的工作如下:

import numpy as np
import pandas as pd
import logging


logger = logging.getLogger('test2')
logger.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh = logging.FileHandler('test2.log')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)

ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
ch.setFormatter(formatter)
logger.addHandler(ch)

X = np.array([1,2,3])
print(X)
logger.info(f'{X}')

str1 = 'hello world'
print(str1)
logger.info(str1)

df = pd.DataFrame({'col1': np.arange(40),
                   'col2': np.tile([0,1,2,3],10)
                    })
print(df)
logger.info(f'{df}')

基本上,每当我需要打印某些内容时,都必须添加一行额外的代码来记录它。在此示例中,这看起来似乎不是问题,但是如果我必须在超长脚本中打印500行以上的内容,效率可能会很低。

我的问题如下:

1)有几行代码是否有解决方法,以便每当我在Spyder控制台上打印某些内容时,它都将记录到外部文件中?我想看看它是怎么做到的。

2)如果通过首先从外部txt文件中读取python脚本并运行该脚本来运行该脚本,那么与正常运行脚本的情况相比,日志记录是否有所不同?

3)由于我将Anaconda用作Python环境,将Spyder用作IDE,这是否使日志记录与使用其他python编辑器和其他Python环境有所不同?

提前谢谢

EDIT1:我尝试使用以下代码

ch = logging.StreamHandler(stream=sys.stdout)
ch.setLevel(logging.DEBUG)

但不幸的是,Spyder控制台上打印的所有内容都不会复制到外部文件中。也许我错过了一些东西。

import numpy as np
import pandas as pd

import logging
import sys

logger = logging.getLogger('test3')
logger.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh = logging.FileHandler('test3.log')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)

ch = logging.StreamHandler(stream=sys.stdout)
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)

X = np.array([1,2,3])
print(X)

str1 = 'hello world'
print(str1)

df = pd.DataFrame({'col1': np.arange(40),
                   'col2': np.tile([0,1,2,3],10)
                    })
print(df)

0 个答案:

没有答案