Python 写程序专用 log 分享(二)

在上一篇中
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 可以输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值