Google Colab中日志模块存在问题

8
我有一个使用日志模块进行错误处理的Python脚本。虽然这个Python脚本在导入到Google Colab时能正常工作,但它无法将错误记录到日志文件中。
为了尝试解决这个问题,我在Google Colab上尝试了下面的脚本,以便查看是否能够完整地写入日志。
import logging
logging.basicConfig(filename="log_file_test.log",
                            filemode='a',
                            format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
                            datefmt='%H:%M:%S',
                            level=logging.DEBUG)

logging.info("This is a test log ..")

令我失望的是,它甚至没有创建名为log_file_test.log的日志文件。我尝试在本地运行相同的脚本,它确实生成了一个文件log_file_test.log,并包含以下文本:
13:20:53,441 root INFO This is a test log ..
我错过了什么?目前,我正在用打印语句替换错误日志,但我认为必须有一种解决方法。
3个回答

7

logging.basicConfig 只需要运行一次*

后续调用 basicConfig 会被忽略。

* 除非你在使用 Python 3.8 并使用标志 force=True

logging.basicConfig(filename='app.log',
                    level=logging.DEBUG,
                    force=True, # Resets any previous configuration
                    )

解决方法 (2)

(1) 您可以使用此命令轻松重置Colab工作区

exit

等待它恢复后再尝试您的命令。

(2) 但是,如果您计划执行多次重置和/或正在学习使用 logging,那么最好使用%%python 魔术方法在子进程中运行整个单元。请参见下面的照片。

enter image description here


我错过了什么?

更深入地了解logging如何工作。这有点棘手,但有许多很好的网站可以解释其中的问题。


对我来说,logging.basicConfig(force=True) 起作用了。笔记本电脑(和colab)是否可能在启动时运行 logging.basicConfig()?在这种情况下,除非设置 force=True,否则将忽略进一步的 logging.basicConfig() 命令。 - mgb

7
也许您已经在某种程度上重新配置了您的环境?(尝试运行时菜单 -> 重置所有运行时...)对我来说,您的代码段完全按照编写方式正常工作-- enter image description here

0

[这个答案][1]解决了这个问题。 你需要:

  1. 使用logging.root.removeHandler清除环境中的日志处理程序
  2. 使用logging.getLogger('RootLogger').setLevel(logging.DEBUG)设置日志级别。

仅使用logging.basicConfig设置级别对我来说不起作用。


你的链接缺少URL。 - Dash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接