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]属性居然是 (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()

热门