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

在Spyder python编辑器中将控制台输出记录到日志文件的python方式,python,python-3.x,logging,console,anaconda,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 - %(n

我使用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) 如果python脚本是通过首先从外部txt文件读取并执行它来运行的,那么日志记录是否与脚本正常运行的情况有所不同

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)

流处理程序看起来配置错误,请尝试
ch=logging.StreamHandler(stream=sys.stdout)
ch.setLevel(logging.DEBUG)
@hoefling谢谢您的回复。我想我会在一个单独的文件中试试你的,看看结果如何。但我所做的只是在第一次会议之后。我认为食谱是官方的,因此是正确的?!日志记录手册只是示例的集合。在您选择的示例中,只有级别为
ERROR
CRITICAL
的记录才会被打印。@我根据您的建议进行了更改(请参阅EDIT1下的代码),但控制台上打印的任何内容都不会被复制到日志文件,除非我明确键入
logger.info(一些字符串)
。我错过什么了吗?你是说Spyder的互动控制台?它只是一个IPython控制台,所以任何IPython解决方案都应该可以工作。参见例如等。