先上源码:
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()