如何在导入的Python模块中设置全局日志记录对象?

时间:2015-10-21 13:34:42

标签: python logging module global

我想在Python模块中创建一个全局日志记录对象,该模块由许多小脚本导入。 Python模块旨在为所有脚本提供一致的设置,例如日志记录,徽标,计时等。我正在尝试在此模块中设置日志记录,以便可以轻松地一次更改所有这些脚本的日志记录特征。

Python模块的相关部分如下:

if engageLog:
    global log
    log = logging.getLogger(__name__)
    logging.root.addHandler(technicolor.ColorisingStreamHandler())

我怎么能这样编写这样的记录对象在脚本中可用而不需要任何设置而不是导入模块?

在以下示例脚本中,模块名为propyte

#!/usr/bin/env python

"""
################################################################################
#                                                                              #
# script-1                                                                     #
#                                                                              #
################################################################################

Usage:
    script-1 [options]

Options:
    -h, --help               display help message
    --version                display version and exit
    -v, --verbose            verbose logging
    -u, --username=USERNAME  username
    --data=FILENAME          input data file [default: data.txt]
"""

name    = "script-1"
version = "2015-10-21T1331Z"

import os
import sys
import time
import docopt

import propyte

def main(options):

    global program
    program = propyte.Program(options = options)

    # access options and arguments
    input_data_filename = options["--data"]

    log.info("")

    log.info("input data file: {filename}".format(
        filename = input_data_filename
    ))

    print("")

    program.terminate()

if __name__ == "__main__":
    options = docopt.docopt(__doc__)
    if options["--version"]:
        print(version)
        exit()
    main(options)

1 个答案:

答案 0 :(得分:1)

只需使用模块上的log属性:

import propyte

propyte.log  # the global log object in the propyte module

但请注意,logging模块配置已经是全局的。您可以使用logging.getLogger('somename')并返回与该名称关联的 singleton 记录器对象。当您在另一个模块中检索相同的记录器时,仍然会出现应用于该对象的配置。