有个坑不知道怎么绕,求方法(关于把 print 输出记录到.log 里)

2019-09-17 18:15:51 +08:00
 qazwsxkevin

1、我是用这个函数把 String 变量写入到文件的( String 主要是 html 网页代码,需要把内容转成 UTF-8,所以根据网上的例子,做了 sys.stdout,不过这个函数保存其它文本也有用到,反正是一直以来都没啥问题)

#String 写入到 file
def saveStrtoFiles(ffname,ffpath,tmpStr):
    fullpath = ffpath + ffname
    sys.stdout = sys.__stdout__ = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8', line_buffering=True)
    with codecs.open(fullpath, 'a+', encoding='utf-8') as f:
        f.write(tmpStr + '\r\n')
    return fullpath

2、最近需要把 print 输出的内容写入到一个.log 文件里,我用了这个函数来完成

#记录控制台内容的函数
def consoleLog(logfilespath):
    class Logger(object):
        def __init__(self, filename="Default.log"):
            self.terminal = sys.stdout
            self.log = open(filename, "a")

        def write(self, message):
            self.terminal.write(message)
            self.log.write(message)

        def flush(self):
            pass
    sys.stdout = Logger(logfilespath)
    pass

3、最近起用了上面第 2 点的记录日志函数,以前做好的 saveStrtoFiles 函数就有方法错误,提示 io 的问题:

    #建立输出日志
    SomeFunc.consoleLog((os.path.join(tarPath + ID+ '/') + ID + '.log'))
  File "D:\Test\SomeFunc.py", line 154, in saveStrtoFiles
    sys.stdout = sys.__stdout__ = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8', line_buffering=True)
AttributeError: 'Logger' object has no attribute 'detach'

4、请问大家,我应该如何绕开这个坑呢? 首要保证 saveStrtoFiles 存 UTF-8 的方式不变以免造成影响,print 输出记录到文件方法怎么变都可以。。。能达到目的就可以了。。,谢谢大家热心解答!

2533 次点击
所在节点    Python
6 条回复
conn4575
2019-09-17 18:35:10 +08:00
你要了解一下 logging 模块的用法,里面的 LoggerHandler 就是控制日志输出位置的组件,里面的 BasicHandler 和 FileHandler 就是你想要的
izoabr
2019-09-17 18:35:15 +08:00
威什么不直接用 logging 模块?
qsnow6
2019-09-17 18:55:05 +08:00
所以说,要熟读官方的文档,python 早期非常受欢迎的一大原因,就是它自带的 battery 非常好用
loryyang
2019-09-17 19:02:00 +08:00
重复造轮子了?
xiaofengchen
2019-09-18 08:51:21 +08:00
def log(*args, **kwargs):
with open('a.log', 'a', encoding='utf-8') as f:
print(*args, file=f, **kwargs)
BingoXuan
2019-09-18 13:59:31 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/601609

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX