【发布时间】:2013-02-28 21:23:23
【问题描述】:
第一次玩日志模块。我真的有两个问题:
我在创建 FileHandler 时发现的所有示例都只使用了一个虚拟文件名,但我希望我的日志文件具有特定的标题格式。
log = time.strftime('./logs/'+'%H:%M:%S %d %b %Y', time.localtime())+'.log'
logger = logging.getLogger('myproject')
formatter = logging.Formatter('%(asctime)s %(message)s', '%H:%M:%S %d %b %Y')
handler = logging.FileHandler(log)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
这个似乎起初可以工作,因为创建了日志文件,但是当我杀死脚本并检查它时,里面什么都没有。在您建议使用with open(log) as f: 之前,在handler = logging.FileHandler(log) 中使用f 代替log 给了我关于文件甚至没有被创建的错误。我做错了什么没有写入日志文件?是不是因为我试图在文件名上过于聪明?
第二个问题可能以某种方式包含第一个问题。我真正想要的是一种同时写入控制台和日志文件的方法,因为这个脚本需要很长时间,我想衡量进度。我已经看到有关于如何做到这一点的答案,例如here,但所有这些似乎都假设我想要两个不同输出的不同级别的日志记录;我不。顺便说一句,我确实意识到,如果我的脚本没有动态生成日志文件的名称,我可以执行python myscript.py | tee log.file 之类的操作来避免制作不同的处理程序。
由于第一个问题涉及的变量,我觉得我无法回答第二个问题,但由于生病和随后的睡眠不足,我现在一头雾水。如果有人能像五岁的孩子一样向我解释如何以相同的输出同时写入控制台和日志文件,我将不胜感激。
非常感谢。
【问题讨论】:
-
嗯。我想我是荣誉 Windows 开发者?我的脚本在
.中,我打算在位于同一位置的logs中创建日志文件。就像我说的那样,文件确实被创建了,如果没有别的。 -
肯定的;立即从 CLI 运行脚本并观察它做某事或什么都不做。
-
好的,很好,我们已经过去了;现在让我看看我是否能找出真正的问题。 :)
-
另一个可能很愚蠢的问题:您是使用
logger.log还是logging.log(或debug等)进行记录;问题是您是否在返回的记录器上使用方法,或顶级模块函数)。 -
不是一个愚蠢的问题。我自己也不知道。您在问题正文中看到的所有内容都是我如何拼凑而成的。我只是认为我需要超越文档中显示的基本日志记录。