代码
demo.py:
import sys
import os
import time
# 控制台输出记录到文件
class Logger(object):
def __init__(self, file_name="Default.log", stream=sys.stdout):
self.terminal = stream
self.log = open(file_name, "a")
def write(self, message):
self.terminal.write(message)
self.log.write(message)
def flush(self):
pass
if __name__ == '__main__':
# 自定义目录存放日志文件
log_path = './Logs/'
if not os.path.exists(log_path):
os.makedirs(log_path)
# 日志文件名按照程序运行时间设置
log_file_name = log_path + 'log-' + time.strftime("%Y%m%d-%H%M%S", time.localtime()) + '.log'
# 记录正常的 print 信息
sys.stdout = Logger(log_file_name)
# 记录 traceback 异常信息
sys.stderr = Logger(log_file_name)
print(5555)
print(2/0)
logger.info('Completed')
./Logs/log-20210103-140231.log文件内容:
5555
Traceback (most recent call last):
File "G:\Codes\demo.py", line 33, in <module>
print(2/0)
ZeroDivisionError: division by zero
'Completed'
小贴士
- 有些终端内容是没有写入log文件的,注意观察能写入log文件的内容的输出方式,按照这个方式来修改。