1

我是 Python 新手。我正在使用带有 Python 模式的 Vim 来编辑和测试我的代码,并注意到如果我多次运行相同的代码,日志文件只会在第一次运行代码时更新。例如下面是一段名为“testlogging.py”的代码

#!/usr/bin/python2.7
import os.path
import logging

filename_logging = os.path.join(os.path.dirname(__file__), "testlogging.log")
logging.basicConfig(filename=filename_logging, filemode='w',
                level=logging.DEBUG)
logging.info('Aye')

如果我打开一个新的 gvim 会话并使用 python 模式运行此代码,那么我会得到一个名为“testlogging.log”的文件,其中包含内容

INFO:root:Aye

看起来很有希望!但是如果我删除日志文件并再次以 pythong-mode 运行代码,则不会重新创建日志文件。如果此时我在这样的终端中运行代码

./testlogging.py

然后将再次生成日志文件!

我检查了 Python 文档并在日志记录教程( https://docs.python.org/2.7/howto/logging.html#logging-to-a-file )中注意到了这一行:

一个非常常见的情况是在文件中记录日志事件,接下来让我们看看。请务必在新启动的 Python 解释器中尝试以下操作,不要只从上述会话继续:...

所以我猜这个日志文件只更新一次的问题与我第二次运行代码时保留在同一个解释器中的python模式有关。所以我的问题是:有没有办法解决这个问题,通过摆弄日志模块,在代码中添加一些东西来重置解释器或告诉 Python 模式来重置它?

我也很好奇为什么日志记录模块需要一个新启动的解释器才能工作......

提前感谢您的帮助。

4

2 回答 2

1

不会重新创建日志文件,因为日志记录模块仍然打开旧的日志文件并将继续写入(即使您已将其删除)。解决方案是强制日志模块释放所有获取的资源,然后再在同一个解释器中运行您的代码:

# configure logging
# log a message
# delete log file

logging.shutdown()

# configure logging
# log a message (log file will be recreated)

换句话说,logging.shutdown()在代码末尾调用,然后您可以在同一个解释器中重新运行它,它将按预期工作(在每次运行时重新创建日志文件)。

于 2014-09-21T11:22:11.277 回答
0

您使用“w”模式打开了日志文件。“w” 表示从头开始写入数据,因此您只看到上次执行的日志。

这就是为什么您在日志文件中看到相同内容的原因。

您应该更正您在第五到第七行的代码,以便遵循。

filename_logging = os.path.join(os.path.dirname(__file__), "testlogging.log")
logging.basicConfig(filename=filename_logging, filemode='a',
            level=logging.DEBUG)

上面的代码使用了“a”模式,即追加模式,所以新的日志数据会被添加到日志文件的末尾。

于 2014-09-21T11:15:37.003 回答