我有一个小的python项目,它具有以下结构-
Project
-- pkg01
-- test01.py
-- pkg02
-- test02.py
-- logging.conf
我计划使用默认的日志模块将消息打印到stdout和日志文件。 要使用日志模块,需要进行一些初始化-
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')
logger.info('testing')
目前,在开始记录消息之前,我在每个模块中执行此初始化。是否可以在一个地方只执行一次初始化,以便通过在整个项目中进行日志记录来重用相同的设置?
在每个模块中,最佳实践是定义一个如下所示的记录器:
在模块顶部附近,然后在模块中的其他代码中执行
如果需要在模块中细分日志记录活动,请使用例如
并酌情登录到
loggerA
和loggerB
。在主程序中,例如:
或者
请参阅here以获取来自多个模块的日志,以及here以获取将被其他代码用作库模块的代码的日志配置。
更新:调用
fileConfig()
时,如果使用的是Python 2.6或更高版本,则可能需要指定disable_existing_loggers=False
(有关详细信息,请参见the docs)。默认值为True
表示向后兼容,这将导致所有现有的日志记录器被fileConfig()
禁用,除非它们或它们的祖先在配置中显式命名。值设置为False
时,现有的记录器将保持独立。如果使用Python 2.7/Python 3.2或更高版本,您可能希望考虑使用比fileConfig()
更好的dictConfig()
API,因为它提供了对配置的更多控制。我总是这样做。
使用单个python文件将我的日志配置为名为“
log_conf.py
”的单例模式在另一个模块中,只需导入配置。
这是一个简单有效的单例日志模式。
实际上,每个记录器都是父程序包记录器的子程序(即} (您自己的记录器配置)或^{} (设置根记录器)来实现。安装程序登录您的输入模块(
package.subpackage.module
从package.subpackage)
继承配置,所以您只需配置根记录器。这可以通过^{__main__.py
)或任何您想运行的程序,例如main_script.py
。__init__.py
也可以)使用basicConfig:
使用文件配置:
然后使用以下命令创建每个记录器:
有关详细信息,请参见Advanced Logging Tutorial。
相关问题 更多 >
编程相关推荐