重置python解释器进行日志记录

时间:2014-09-21 10:54:10

标签: python logging vim python-mode

我是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-mode运行此代码,那么我会得到一个名为" 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-mode有关。所以我的问题是:无论如何要解决这个问题,通过摆弄日志模块,在代码中添加一些内容来重置解释器或告诉Python模式重置它?

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

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

# configure logging
# log a message
# delete log file

logging.shutdown()

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

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

答案 1 :(得分: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"模式,即追加模式,因此将在日志文件的末尾添加新的日志数据。