python 日志记录基本使用方法

python logging basic how to use

Python 日志记录极大地帮助我创建后台处理脚本的脚本。

我目前使用的基本配置:

import logging
LOG_FILENAME = 'example.log'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)

logging.debug('This message should go to the log file')

如 Python 文档中所述:15.6. logging。这样做的好处是您可以使用以下行:

logging.debug('This message should go to the log file')

遍历所有模块和 类,无需考虑任何日志记录配置。然后在主脚本中设置日志记录以转到一个文件,所有消息都将转到同一个文件。简单。

还有另一种方法可以做到这一点,大致如下:

my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
my_logger.debug('Test string')

除了您现在有一个要跟踪的实例之外,这是一回事:my_logger。我的模块和 类 不知道当天的记录器是如何命名的,必须传递另一个变量会很麻烦。我怀疑我在这里遗漏了一些非常基本的东西,要么是我对日志记录模块的使用有问题,只是由于一些小故障才起作用,或者第二种方法也必须非常简单。

我想切换到第二种方法,因为这似乎是使用附加功能(例如 RotatingFileHandler)的唯一方法。

来自文档 (https://docs.python.org/2/library/logging.html):

Multiple calls to getLogger() with the same name will always return a reference to the same Logger object.

因此您无需传递另一个变量就可以逃脱。

此外,记录器形成一个层次结构:

"loggers with names of foo.bar, foo.bar.baz, and foo.bam are all descendants of foo"

所以文档推荐使用:

logging.getLogger(__name__)

这样,就可以像组织模块一样组织记录器。

在我的项目中,我通常为每个模块定义一个 Logger 实例,LOGGER = logging.getLogger(__name__),然后只需将 logging.XXX 的所有使用查找并替换为 LOGGER.XXX .

您实际上不需要使用命名记录器来利用 RotatingFileHandler 和其他功能。当你做一个普​​通的 logging.info 调用时,它使用一个名为 "" (空字符串)的默认记录器。您可以将处理程序附加到该记录器,就像附加到任何其他记录器一样。