在上一篇中
https://blog.csdn.net/HaoZiHuang/article/details/124171156
logger函数是这样的:
import logging
root_nowexp = "test"
def get_logger(filename, verbosity=1, name=None):
level_dict = {0: logging.DEBUG, 1: logging.INFO, 2: logging.WARNING, 3: logging.ERROR}
formatter = logging.Formatter(
"[%(asctime)s][%(filename)s][line:%(lineno)d][%(levelname)s] %(message)s"
)
logger = logging.getLogger(name)
logger.setLevel(level_dict[verbosity])
fh = logging.FileHandler(filename, "w")
fh.setFormatter(formatter)
logger.addHandler(fh)
sh = logging.StreamHandler()
sh.setFormatter(formatter)
logger.addHandler(sh)
return logger
logger = get_logger(f'{root_nowexp}exp.log')
logger.info('start training!')
logger.warning('啊哈哈哈哈')
logger.error('你们被拒绝过吗')
这个是输出:
[2022-10-02 22:45:21,224][x.py][line:24][INFO] start training!
[2022-10-02 22:45:21,224][x.py][line:25][WARNING] 啊哈哈哈哈
[2022-10-02 22:45:21,224][x.py][line:26][ERROR] 你们被拒绝过吗
其实还有一个 debug :
logger.debug('test!')
但是在当前程序中,执行这个是不会输出的
因为代码里有这样一行
logger.setLevel(level_dict[verbosity])
给记录器设置阈值为 level 。日志等级小于 level 会被忽略。严重性为 level 或更高的日志消息将由该记录器的任何一个或多个处理器发出,除非将处理器的级别设置为比 level 更高的级别。
摘自:
https://docs.python.org/zh-cn/3/library/logging.html#logging.Logger.setLevel
我们来看看这几个常数
>>> import logging
>>> logging.DEBUG
10
>>> logging.INFO
20
>>> logging.WARNING
30
>>> logging.ERROR
40
接上边的函数 setLevel
get_logger
函数中我们默认给其传入了logging.INFO
也就是20,所以我们执行
logger.info
logger.warning
logger.error
都可以输出正常值,而我们使用 logger.debug时,其信息则不会被输出
如果把verbosity
参数设置为verbosity=0
, 则 logger.debug 可以输出