python logging莫名其妙打印到stderr?
理解问题python logging莫名其妙打印到stderr?
已完成理解「python logging莫名其妙打印到stderr?」
展开阅读网页
Python的logging
模块默认情况下会将日志输出到stderr
,这是由于logging
模块的StreamHandler
类默认行为所决定的。StreamHandler
类位于核心logging
包中,它可以将日志记录输出发送到数据流,如sys.stdout
、sys.stderr
或任何文件型对象,这些对象需要支持write()
和flush()
方法815。
在Python中,sys.stderr
是用于错误消息的标准错误流,而sys.stdout
是用于普通输出的标准输出流12。如果logging
模块没有被显式配置,或者没有设置StreamHandler
,那么它将默认使用sys.stderr
作为输出目标23。这意味着,如果没有特别指定,所有的日志信息,包括错误和普通消息,都会被发送到stderr
。
此外,如果库的应用程序没有使用日志,并且库代码调用日志进行记录,那么严重性为WARNING
和更高级别的事件将被打印到sys.stderr
,这被认为是最好的默认行为11。这也解释了为什么在某些情况下,日志信息会莫名其妙地打印到stderr
。
如果你希望改变日志的输出行为,可以通过配置logging
模块来实现。例如,可以设置一个FileHandler
来将日志输出到文件,或者通过修改StreamHandler
的实例来改变输出目标。此外,还可以通过自定义流来同时将日志信息输出到屏幕和文件,这可以通过将sys.stdout
替换为自定义流来实现,这样就不会影响控制台的输出,同时又能将输出内容保存到文件中1314。
总之,Python的logging
模块默认将日志输出到stderr
,这是由于StreamHandler
的默认行为。如果需要改变这一行为,可以通过配置logging
模块来指定不同的输出目标或使用自定义流。14567910。
logging模块默认使用sys.stderr1 | 默认日志输出 logging模块默认将日志输出到stderr。 |
StreamHandler类发送日志到流2 | StreamHandler功能 StreamHandler类将日志发送到sys.stdout或sys.stderr等流。 |
logging.StreamHandle默认输出到stderr3 | StreamHandle默认设置 Python中logging.StreamHandle默认输出日志到stderr。 |
日志默认输出到stderr需关键词过滤4 | 日志输出过滤 默认所有日志输出到stderr,需根据关键词进行过滤。 |
logging.basicConfig()打印到stderr5 | basicConfig配置 使用logging.basicConfig()时,默认打印消息到stderr。 |
库代码日志记录默认行为11 | 库代码日志行为 若应用程序不使用日志,库代码记录的严重性WARNING及以上事件将打印到stderr。 |
logging模块1 | 默认日志输出 logging模块默认使用StreamHandler,输出到stderr。 |
StreamHandler类8 | 日志输出处理 位于核心logging包,发送日志到sys.stdout, sys.stderr或文件对象。 |
sys.stderr4 | 错误日志输出 如果不设置StreamHandler,日志默认输出到stderr中。 |
logging.basicConfig()5 | 日志配置函数 设置基本配置后,日志消息打印到stderr。 |
自定义日志流13 | 日志流自定义 通过替换sys.stdout实现日志记录功能,不影响控制台输出。 |
StreamHandler2 | 日志输出处理 StreamHandler类负责将日志输出到数据流,如sys.stdout或sys.stderr。 |
sys.stderr4 | 默认错误日志输出 Python logging模块默认将所有日志输出到stderr中。 |
logging.basicConfig()5 | 日志配置函数 用于设置日志的基本配置,可以指定日志输出格式和目的地。 |
CustomStream13 | 自定义日志流 通过替换sys.stdout,可以在不影响控制台输出的同时,将日志保存到文件。 |