python - 在多个模块中使用日志记录

我有一个具有以下结构的小型 python 项目 -

Project 
 -- pkg01
   -- test01.py
 -- pkg02
   -- test02.py
 -- logging.conf

我计划使用默认的日志模块将消息打印到标准输出和日志文件。 要使用日志模块,需要进行一些初始化 -

import logging.config

logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')

logger.info('testing')

目前,我在开始记录消息之前在每个模块中执行此初始化。是否可以在一个地方只执行一次此初始化,以便通过在整个项目中记录来重用相同的设置?

最佳答案

最佳做法是,在每个模块中,都有一个这样定义的记录器:

import logging
logger = logging.getLogger(__name__)

在模块顶部附近,然后在模块的其他代码中执行例如

logger.debug('My message with %s', 'variable data')

如果您需要在模块内分割日志记录事件,请使用例如

loggerA = logging.getLogger(__name__ + '.A')
loggerB = logging.getLogger(__name__ + '.B')

并根据需要登录到 loggerAloggerB

在你的主程序中,例如:

def main():
    "your program code"

if __name__ == '__main__':
    import logging.config
    logging.config.fileConfig('/path/to/logging.conf')
    main()

def main():
    import logging.config
    logging.config.fileConfig('/path/to/logging.conf')
    # your program code

if __name__ == '__main__':
    main()

见 here用于从多个模块进行日志记录,以及 here用于记录将被其他代码用作库模块的代码配置。

更新:在调用 fileConfig() 时,如果您使用的是 Python 2.6 或更高版本(见 the docs 了解更多信息)。为了向后兼容,默认值为 True,这会导致所有现有记录器被 fileConfig() 禁用,除非它们或其祖先在配置中明确命名。将值设置为 False 时,现有记录器将被单独保留。如果使用 Python 2.7/Python 3.2 或更高版本,您可能希望考虑比 fileConfig() 更好的 dictConfig() API,因为它可以更好地控制配置。

https://stackoverflow.com/questions/15727420/

相关文章:

linux - 在每行的开头添加前缀字符串

linux - 在 Linux 中更改默认 shell

python - cron 和 virtualenv

linux - 如何在 Vimdiff 中展开/折叠差异部分?

linux - 如何在不输入 'screen' 的情况下退出 'exit' ?

windows - Windows 和 Linux 目录名称中禁止使用哪些字符?

linux - Linux 中是否有任何标准的退出状态代码?

python - 什么时候 "i += x"与 Python 中的 "i = i + x"不同?

python - 如何格式化小数以始终显示 2 个小数位?

python - 转义正则表达式字符串