Python 为什么在没有实例的情况下访问日志模块?
我正在学习Python中的日志记录,但我不明白为什么日志记录可以这样初始化:Python 为什么在没有实例的情况下访问日志模块?,python,Python,我正在学习Python中的日志记录,但我不明白为什么日志记录可以这样初始化: logging.basicConfig(level=logging.INFO) 它不需要像这样的东西吗 l_instance = logging.basicConfig(level=logging.INFO) 与CSV的工作方式类似: c_instance = csv.reader() 让我们看一下回答这个问题的源代码。它的作用是向根目录添加处理程序: _acquireLock() try: if len
logging.basicConfig(level=logging.INFO)
它不需要像这样的东西吗
l_instance = logging.basicConfig(level=logging.INFO)
与CSV的工作方式类似:
c_instance = csv.reader()
让我们看一下回答这个问题的源代码。它的作用是向根目录添加处理程序:
_acquireLock()
try:
if len(root.handlers) == 0:
filename = kwargs.get("filename")
if filename:
mode = kwargs.get("filemode", 'a')
hdlr = FileHandler(filename, mode)
else:
stream = kwargs.get("stream")
hdlr = StreamHandler(stream)
fs = kwargs.get("format", BASIC_FORMAT)
dfs = kwargs.get("datefmt", None)
fmt = Formatter(fs, dfs)
hdlr.setFormatter(fmt)
root.addHandler(hdlr)
level = kwargs.get("level")
if level is not None:
root.setLevel(level)
finally:
_releaseLock()
因此,一个原因是该方法返回None
:D
现在,如果调用getLogger
方法:
if name:
return Logger.manager.getLogger(name)
else:
return root
您可以看到它返回这个创建的根。同样的事情也适用于其他方法,如debug
:
def debug(msg, *args, **kwargs):
"""
Log a message with severity 'DEBUG' on the root logger.
"""
if len(root.handlers) == 0:
basicConfig()
root.debug(msg, *args, **kwargs)
看到了吗?它在根目录下运行。Pyton是开源的,您可以利用它;) 此外,请阅读本文以了解基本原理。Tl;dr版本:方便。