繁体   English   中英

打印日志并同时存储日志,我的代码有什么问题?

[英]print the log and store the log at the sametime, what's wrong with my code?

#!/usr/bin/python
import os 
import logging
import pickle

def _config_logger(test_name):
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)
    logging.basicConfig(format='%(message)s',filename="./%s.txt" %(test_name))
    stderrLogger=logging.StreamHandler()
    stderrLogger.setFormatter(logging.Formatter('%(message)s'))
    logging.getLogger("").addHandler(stderrLogger)
    return logger

for i in ['x','y','z']:
    logger=_config_logger(i)
    logger.debug(i)

不需要输出,y打印两次,z打印3次。

$ python test.py
X
ÿ
ÿ
ž
ž
ž

但是我只有一个文件x.txt,我希望是y.txt。 z.txt在那

$ ls test.py x.txt

我应该怎么做?

检查文档logging.basicConfig

如果根记录器已经为其配置了处理程序,则此功能不执行任何操作。

调用一次以登录x.txt ,后续调用无效。

而不是调用logging.basicConfig ,而是添加类似于添加流处理程序的文件处理程序:

file_handler = logging.FileHandler("./%s.txt" %test_name)
file_handler.setFormatter(logging.Formatter('%(message)s'))
logger.addHandler(file_handler)

这里:

def _config_logger(test_name):
    logger = logging.getLogger()

您不会将test_name传递给geLogger() ,因此您始终会获得root记录器。 然后几行:

logging.getLogger("").addHandler(stderrLogger)

您继续向根记录器添加处理程序,因此出现“ y打印两次,z打印3次”的症状。

同样, .basicConfig()调用.basicConfig()是没有用的,只有第一个调用才有意义,请参见详细手册

通过创建带有默认Formatter的StreamHandler并将其添加到根记录器,对记录系统进行基本配置。 如果没有为根记录器定义处理程序,则debug(),info(),warning(),error()和critical()函数将自动调用basicConfig()。

如果根记录器已经为其配置了处理程序,则此功能不执行任何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM