我想在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)
答案 0 :(得分:1)
只需使用模块上的log
属性:
import propyte
propyte.log # the global log object in the propyte module
但请注意,logging
模块配置已经是全局的。您可以使用logging.getLogger('somename')
并返回与该名称关联的 singleton 记录器对象。当您在另一个模块中检索相同的记录器时,仍然会出现应用于该对象的配置。