Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否需要显式检查“名称”__主要的;在Python中调用getLogger之前?_Python_Logging - Fatal编程技术网

我是否需要显式检查“名称”__主要的;在Python中调用getLogger之前?

我是否需要显式检查“名称”__主要的;在Python中调用getLogger之前?,python,logging,Python,Logging,我相信使用Python的内置日志模块将主模块中的logger作为根日志记录器是一种标准做法。假设这是正确的,在我看来,对于任何可以或不可以作为main运行的模块,我都需要显式地进行检查。原因是,如果我遵循调用logging.getLogger(\uuuu name\uuuuu)的标准实践,我将得到一个名为\uuuuuu main\uuuuu的记录器,而不是根记录器: import logging print logging.getLogger().name # root print loggin

我相信使用Python的内置日志模块将主模块中的
logger
作为根日志记录器是一种标准做法。假设这是正确的,在我看来,对于任何可以或不可以作为main运行的模块,我都需要显式地进行检查。原因是,如果我遵循调用
logging.getLogger(\uuuu name\uuuuu)
的标准实践,我将得到一个名为
\uuuuuu main\uuuuu
的记录器,而不是根记录器:

import logging
print logging.getLogger().name # root
print logging.getLogger(__name__).name # __main__
最好的做法总是检查吗

if __name__ == "__main__":
    logger = logging.getLogger()
else:
    logger = logging.getLogger(__name__)

这并不是那么糟糕,因为我总是会有其他代码,只有在
\uuuu name\uuuu==“\uuuu main\uuuuu”
的情况下才会运行(通常包括调用
logging.basicConfig
),但如果只需要一行而不需要更多,那就太好了。

是的-我相信这是个好主意。因为-发生的事情如下-


如果您以python prog.py的形式运行一个程序——
\uuuuu name\uuuuuuu
将是
\uuuuuu main\uuuuu
),您将获得
根日志(预期)。或者你甚至可以给出你想要的名字(比如
prog
)。当您导入该模块时,名称将是该模块的名称。(python文件名,在本例中不带扩展名
prog
),这将帮助您识别日志的来源-这是您想要的。所以一般来说,这样做是个好主意

使用
logging.getLogger(\uuuu name\uuuu)
的实践是针对模块级记录器的,如

在脚本(或应用程序的主模块)中,我通常根本不创建记录器,但我会更改根记录器的配置

opts = argparse.ArgumentParser(prog='foo', description=__doc__)
group.add_argument('-v', '--version', action='version',
                   version=__version__)
opts.add_argument('--log', default='warning',
                  choices=['debug', 'info', 'warning', 'error'],
                  help="logging level (defaults to 'warning')")
opts.add_argument("files", metavar='file', nargs='*',
                  help="one or more files to process")
args = opts.parse_args(argv)
logging.basicConfig(level=getattr(logging, args.log.upper(), None),
                    format='%(levelname)s: %(message)s')

因此,我可能有一个名为
\uuuuu main\uuuu
的模块级记录器和一个根记录器,如果我想附加一个
处理程序来处理我的所有日志记录,请触摸根记录器。因此,您可以执行以下操作:
logger=logging.getLogger(*([\uuuuu name\uuuuuuuuuu]if.\uuuuuu name\uuuuuuuu!='\uuuuu main\uuuuuuuuuuuuuuuuu'else[])