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
调用时,它使用一个名为 ""
(空字符串)的默认记录器。您可以将处理程序附加到该记录器,就像附加到任何其他记录器一样。
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
调用时,它使用一个名为 ""
(空字符串)的默认记录器。您可以将处理程序附加到该记录器,就像附加到任何其他记录器一样。