我想在一个由许多小脚本导入的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')
,它将返回与该名称关联的单例记录器对象。当您在另一个模块中检索相同的记录器时,应用于该对象的配置仍然存在。