簡體   English   中英

如何在導入的Python模塊中設置全局日志記錄對象?

[英]How can a global logging object be set up in an imported Python module?

我想在由許多小腳本導入的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)

只需在模塊上使用log屬性:

import propyte

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

但是請注意, logging模塊配置已經是全局的。 您可以使用logging.getLogger('somename') ,它將返回與該名稱關聯的單例記錄器對象。 當您在另一個模塊中檢索同一記錄器時,仍將存在應用於該對象的配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM