在Spyder python编辑器中将控制台输出记录到日志文件的python方式
我使用Anaconda和Spyder作为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
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解决方案都应该可以工作。参见例如等。