记录打印到文件中的所有内容

时间:2012-05-27 03:59:13

标签: python logging

我想创建一个函数来保存每个print命令的记录,将每个命令的字符串存储到文件中的新行中。

def log(line):
    with open('file.txt', "a") as f:
        f.write('\n' + line)

这就是我所拥有的,但是有什么办法可以用Python做我说的话吗?

1 个答案:

答案 0 :(得分:2)

尝试使用自定义类替换stdout

import sys
class LoggedStdout():
    def __init__(self, filename = None):
        self.filename = filename
    def write(self, text):
        sys.__stdout__.write(text)
        if not self.filename is None:
            self.log(text)
    def log(self, line):
        with open(self.filename, "a") as f:
            f.write('\n' + line)

sys.stdout = LoggedStdout('file.txt')

print 'Hello world!'

这不仅会影响print,还会影响将某些内容打印到stdout的任何其他函数,但它通常会更好。

对于生产模式日志记录,最好使用logging module之类的东西,而不是标准IO流上的自制钩子。