
import sys
import datetime
class Logger(object):
def __init__(self, filename, stream=sys.stdout):
self.terminal = stream
self.log = open(filename, 'w',encoding='utf-8')
self.previousMsg = None
sys.stdout = self
def write(self, message):
if self.previousMsg == None or "\n" in self.previousMsg:
topMsg = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + " : "
self.terminal.write(topMsg) # 显示前端
self.log.write(topMsg) # 输出日志
if isinstance(message, str):
self.previousMsg = message
if self.previousMsg == None:
self.previousMsg = ""
self.terminal.write(message)
self.log.write(message)
self.log.flush() # 刷新缓存区,即将缓存区的内容立即写入到文件(否则就会运行完程序在写入)
def flush(self):
pass
# 文件名字(如果之前不存在,则会在程序运行后自动创建,如果存在,则打开会实时显示)
fileName = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
sys.stdout = Logger(fileName+".log") # 记录正常的 print 信息
sys.stderr = Logger(fileName+".log") # 记录 traceback 信息
if __name__ == '__main__':
import time
for i in range(100):
print(i)
time.sleep(1)
if i == 10:
# i/0
break