记录始终打印基本输出,尽管从未被告知过

时间:2018-04-17 14:04:30

标签: python logging

当我尝试从我的脚本登录时,它总是生成基本的日志记录输出。没有配置。

代码如下:

def set_logger():
    res_logger = logging.getLogger(__name__)
    file_handler = logging.FileHandler(filename='%s.log' % __file__)
    res_logger.setLevel(logging.INFO)
    stdout_handler = logging.StreamHandler(sys.stdout)
    file_handler.setLevel(logging.INFO)
    stdout_handler.setLevel(logging.WARNING)
    file_formatter = logging.Formatter('[%(asctime)s]\t{%(filename)s:%(lineno)d}\t%(levelname)s\t- %(message)s')
    file_handler.setFormatter(file_formatter)
    stdout_formatter = logging.Formatter('[%(asctime)s]\t{%(filename)s:%(lineno)d}\t%(levelname)s\t- %(message)s')
    stdout_handler.setFormatter(stdout_formatter)
    res_logger.addHandler(file_handler)
    res_logger.addHandler(stdout_handler)
    return res_logger


logger = set_logger()

logger.error("TEST")

此设置的输出应该在我的stdout和filename.py.log文件中为[2018-04-17 15:50:31,601] {filename.py:60} ERROR - TEST

但是,实际输出是

ERROR:__main__:TEST
[2018-04-17 15:57:37,756]   {filename.py:60}    ERROR   - TEST

甚至更奇怪:我无法使用" logging.error(' test')"即使我从未声明记录器,也要产生基本输出。它什么也没产生。这只发生在这个脚本上。如果我将相同的代码复制粘贴到新脚本,它一切正常。整个脚本中没有完成日志记录配置,您可以看到here

所有9次"记录"被写入的图像显示在图像中。唯一的时间"记录器"使用,是有生产日志的时候。

我无法理解为什么它不起作用。

1 个答案:

答案 0 :(得分:0)

Something else is almost certainly configuring logging and adding another handler which outputs to console. For example, if I copy your code to footest.py and add an import logging, sys at the top and run it using

python -c "import footest"

I get the output you would expect. But if I insert a line

logging.debug('foo')

and then run the python command again, I get the extra line. The logging.debug('foo') doesn't output anything, as the default level is WARNING, but it adds a handler which is used when the logger.error('TEST') at the bottom is executed.