-
Notifications
You must be signed in to change notification settings - Fork 3
/
logger.py
35 lines (27 loc) · 1.53 KB
/
logger.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import logging
from logging import handlers
# reference: https://www.cnblogs.com/nancyzhu/p/8551506.html
experiment_id = 1
class Logger(object):
level_relations = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'crit': logging.CRITICAL
} # 日志级别关系映射
def __init__(self, filename, level='info', when='D', backCount=3, format='%(asctime)s %(levelname)s:%(message)s', datefmt="%Y-%M-%d %H:%M:%S"):
# more detailed format: '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
self.logger = logging.getLogger(filename)
format_str = logging.Formatter(format, datefmt) # 设置日志格式
self.logger.setLevel(self.level_relations.get(level)) # 设置日志级别
sh = logging.StreamHandler() # 往屏幕上输出
sh.setFormatter(format_str) # 设置屏幕上显示的格式
th = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=backCount, encoding='utf-8') # 往文件里写入
th.setFormatter(format_str) # 设置文件里写入的格式
self.logger.addHandler(sh) # 把对象加到logger里
self.logger.addHandler(th)
logger = Logger('out_{}.log'.format(experiment_id), level='info').logger
logger.info('xxx')
# use logging directly
# logging.basicConfig(filename='out_{}.log'.format(experiment_id), filemode='a', level=logging.INFO, format="%(asctime)s %(levelname)s:%(message)s", datefmt="%Y-%M-%d %H:%M:%S")