根据官方记录documentation,
logging.getLogger([name])
返回具有指定名称的记录器,或者,如果未指定名称,则返回作为层次结构的根记录器的记录器。如果指定,则名称通常是点分隔的分层名称,例如“ a”,“ a.b”或“ a.b.c.d”。这些名称的选择完全取决于正在使用日志记录的开发人员。
我们作为参数传递的名称和我们实际上将记录器捕获到的对象的名称之间有什么区别?
即语句中logger
和__name__
之间的区别
logger = logging.getLogger(__name__)
答案 0 :(得分:1)
我们作为参数传递的名称和我们实际上将记录器捕获到的对象的名称之间有什么区别?
那是完全不同的东西:
logger
是稍后在代码中访问记录器对象的方法(很可能在单个文件的范围内)。 logger
充当指向记录器对象的局部变量。实际上,您可以通过以下方式致电.log
:
getLogger(__name__).info('My data')
但是用变量名引用它
__name__
是当前模块的派生名称,通常这将是点缀路径,例如project.module.submodule
-这可以是任何对您有意义的字符串。 __name__
通常很有意义,因此成为一种惯例
答案 1 :(得分:1)
一个仅仅是引用-logger
,我们称之为变量,与记录过程无关。您可以将其称为babapaloopa
,这一点都没有任何区别,除了在引用日志记录对象时使程序更凉爽(尽管这里可以说出一些关于好的设计的信息)。我要强调的是,不是对象的名称,只是碰巧引用该对象的变量的名称-您可以:
another_reference = logger
,现在another_reference
和logger
都指向同一个日志记录对象,显然变量名与该对象无关。对象确实具有ID,但是通常不应该这样做。
name
参数将成为与记录器关联的实际名称,它是记录器对象本身的属性,而不仅仅是对其引用的名称-可能存储在对象的初始化中。您使用__name__
这是一个特殊的字符串,或者其他一些字符串只是一个细节,实际上,从编程的角度来看,这将是记录器的名称。
logger.name
在定义了记录器后,将保留此名称(假设logger
当然是对所述记录对象的引用)。