python项目,print方法的日志收集
import sys
import time
import threading
import datetime
import os
class Logger(object):
def __init__(self, logf):
self.logf = logf
self.terminal = sys.stdout
sys.stdout = self
self.log = open(self.logf, 'a+')
self.previousMsg = None
def write(self, message):
if self.previousMsg == None or "\n" in self.previousMsg:
topMsg = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f") + " : "
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)
def flush(self):
self.log.flush()
def threading_log(log, wait=5):
while 1== 1:
time.sleep(wait)
log.flush()
def start_log(logf="logs/temp.log"):
if not os.path.exists(os.path.dirname(logf)):
os.makedirs(os.path.dirname(logf))
logger = Logger(logf)
log_thread = threading.Thread(target=threading_log ,args=(logger,))
log_thread.start()
使用
start_log()
for i in range(3000):
s = "test"
print(s, i)
time.sleep(20)
效果