引言
- 最近涉及到了使用logging模块来记录一些运行日志
- 封装了一个简单的类,将运行日志打印到console的同时,也输出到对应的文件中
- 便于自己使用,大家也可以使用
封装后代码
import logging
class Logger(object):
level_relations = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
}
def __init__(self, file_name, level='info',
fmt='%(asctime)s - %(levelname)s: %(message)s'):
self.logger = logging.getLogger(file_name)
self.file_name = file_name
self.format_str = logging.Formatter(fmt)
self.logger.setLevel(self.level_relations.get(level))
def output_console(self):
sh = logging.StreamHandler()
sh.setFormatter(self.format_str)
self.logger.addHandler(sh)
return sh
def output_file(self):
th = logging.FileHandler(self.file_name,
encoding='utf-8')
th.setFormatter(self.format_str)
self.logger.addHandler(th)
return th
def remove_handler(self, handler):
self.logger.removeHandler(handler)
def __call__(self, message):
sh = self.output_console()
th = self.output_file()
self.logger.info(message)
self.remove_handler(sh)
self.remove_handler(th)
if __name__ == '__main__':
log = Logger('all.log', level='debug')
for i in range(10):
log(f'EPOCH {i}: loss:{i*0.1}, acc:{i}')
2019-10-25 08:55:06,024 - INFO: EPOCH 0: loss:0.0, acc:0
2019-10-25 08:55:06,024 - INFO: EPOCH 1: loss:0.1, acc:1
2019-10-25 08:55:06,024 - INFO: EPOCH 2: loss:0.2, acc:2
2019-10-25 08:55:06,024 - INFO: EPOCH 3: loss:0.30000000000000004, acc:3
2019-10-25 08:55:06,024 - INFO: EPOCH 4: loss:0.4, acc:4
2019-10-25 08:55:06,024 - INFO: EPOCH 5: loss:0.5, acc:5
2019-10-25 08:55:06,024 - INFO: EPOCH 6: loss:0.6000000000000001, acc:6
2019-10-25 08:55:06,024 - INFO: EPOCH 7: loss:0.7000000000000001, acc:7
2019-10-25 08:55:06,024 - INFO: EPOCH 8: loss:0.8, acc:8
2019-10-25 08:55:06,024 - INFO: EPOCH 9: loss:0.9, acc:9