python中使用logging 出现不能写日志到文件奇怪现象解决方法

先上源码:

import logging

def flogcfg(logfile='./proc.log', flevel=logging.INFO):
    fhandler = logging.FileHandler(logfile, mode='w', encoding="utf8")
    fmt = logging.Formatter('%(asctime)s [%(levelname)s] %(module)s.%(lineno)d %(name)s:\t%(message)s')
    fhandler.setFormatter(fmt)
    fhandler.setLevel(flevel)

    logging.basicConfig(level=flevel,
                        handlers=[fhandler])
    logger = logging.getLogger()
    return logger

def flogcfg_test(logfile='./proc.log'):
    logger = flogcfg(logfile)
    print(22222222222)
    logger.info("info")
    logger.warning("warning")
    logger.error('1111111')
    print(333333333)
    logger.critical("critical")

if __name__ == '__main__':
    flogcfg_test()

运行这个代码在一个地方可以把信息输出到文件,在另外一个却不能输出到文件,而是打印命令终端,百思不得其解,最后跟踪发现问题出在

logger = logging.getLogger()这行代码

不知咋回事,程序运行完这行代码出现如下截图情况:

 看到没有logger下的handlers[0]属性居然是<StreamHandler <stderr> (NOTSET)>,这样当然会向终端输出信息而不会写信息到文件,咋办啦,尝试了很多办法也没解决这个问题,真是有些奇怪,最后想了不是办法的办法,那就是fhandler不是已近生成了文件举兵,我把它强制付给handlers[0]不就行了,却是这样,修改后的代码如下:

import logging

def flogcfg(logfile='./proc.log', flevel=logging.INFO):
    fhandler = logging.FileHandler(logfile, mode='w', encoding="utf8")
    fmt = logging.Formatter('%(asctime)s [%(levelname)s] %(module)s.%(lineno)d %(name)s:\t%(message)s')
    fhandler.setFormatter(fmt)
    fhandler.setLevel(flevel)

    logging.basicConfig(level=flevel,
                        handlers=[fhandler])
    logger = logging.getLogger()
    logger.handlers[0] = fhandler
    return logger

def flogcfg_test(logfile='./proc.log'):
    logger = flogcfg(logfile)
    print(22222222222)
    logger.info("info")
    logger.warning("warning")
    logger.error('1111111')
    print(333333333)
    logger.critical("critical")

if __name__ == '__main__':
    flogcfg_test()

                
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值