在Python中调用getLogger之前,是否需要显式检查__name__ ==“ __main__”?

kuzzooroo

我相信使用Python的内置日志记录模块logger将主模块中的root记录器作为根记录器时,这是标准做法假设这是正确的,在我看来,对于可能作为主模块运行或可能不作为主模块运行的任何模块,我都需要明确检查。原因是,如果我遵循标准的调用方法,logging.getLogger(__name__)则会得到一个名为logger__main__而不是root logger的记录器:

import logging
print logging.getLogger().name # root
print logging.getLogger(__name__).name # __main__

最佳实践是否总是值得检查?

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

这并不是很糟糕,因为我总是会有其他仅在if时才运行的代码__name__ == "__main__"(通常包括对的调用logging.basicConfig),但是只需要一行而不是更多行会很好。

罗兰·史密斯

高级记录教程中所述,使用的实践logging.getLogger(__name__)是针对模块级记录器的

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

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')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

if __name__ ==“ __main__”的位置:

替代 if __name__ == '__main__':

如果__name__ =='__main__'函数调用

__name__ ==“ __main__”怎么办?

来自 if __name__ == "__main__" 的返回语句

如何使用 if __name__ == '__main__':

使用 if __name__ == "__main__" 从其他文件调用函数:

如果 __name __ == '__main__', gunicorn 是否也执行

python if __name__ ==“ __main__”:IndentationError:预期为缩进块

使用python-multiprocessing与if __name__ =='__main__'相关的谜

将多个参数传递给 Python __name__=="__main__"

如果在IPython中__name__ =='__main__'

如何在“if __name__ == '__main__'”中模拟.patch 变量

在Python multiprocessing.Process中,我们是否必须使用`__name__ == __main__`?

__main__和python中的作用域

是否有C与Python等效:如果__name__ =='__main__':在文件顶部写入main()?

python logger作为__main__的子级

Python tkinter“ KeyError:<class __main__。”。错误

如果__name__ =='__main__'不起作用ipython

如果__name__ ==“ __main__”条件(带烧瓶/弹性豆茎)

如何测试或模拟“如果__name__ =='__main__'”内容

为什么不将__name__ =='__main__'放在模块的开头?

<function __main __。add_numbers(x,y)>中的__main__

在C ++中模拟__name__ == __main__是否导致错误“未定义类似函数的宏”

R是否等效于pythonic的“如果__name__ ==“ __main__”:main()“?

Pycharm“Python 控制台”中的 exec(open) 函数不执行“if __name__ == '__main__”块

Matlab功能类似于python的__name __ =='__ main__'

python在Azure Pipelines的'.py'中找不到'__main__'模块

如果__name__ =='__main__':语句下写很多代码是否常见?