自定义日志类 Python 范围
下面是要考虑的开发环境。
有少量的Python模块,每个模块里包含一个或多个类。还有一个主模块,用来调用这些类。我们有一个自定义的日志模块,叫做logger
,里面有一个类叫Logger
。假设我用debug
的日志级别来调用主执行类。我的问题是,怎么才能让这个日志级别在其他所有调用中都能继承,包括其他类、那些类里的方法,以及主模块里的函数等等……
比如,Logger
对象是这样调用的:log=Logger(0)
(日志级别是一个整数,这样做是为了和我们在其他脚本中使用的语法一致,比如shell脚本,而不是Python)。
我最终的目标是让代码里充满log.log_debug('debug message')
和log.log_error('error message')
,但只有在选择了正确的log_level
时才真正打印消息。如果可能的话,只希望在主模块里有一次
from logger import Logger
调用。
谢谢你的时间。
==================================
编辑
在主执行模块里,有一个main()
函数,返回一个parser.parse_args()
对象,并带有一个参数--log_level
,目的是全局定义(至少这是我的意图)log_level
。这里有一个默认的log_level
处理(也就是说,它总是被定义)。
我会尝试模拟一个最小的例子。
import argparse
from logfile from Logfile
from logger import Logger
def argument_parser():
parser=argparse.ArgumentParser()
stuff
return parser.parse_args()
def log_file_stuff():
log_file=Logfile()
log_file.methods() [*]
def main():
args=argument_parser()
# Here log_level is defined with args.log_level
global log
log=log(log_level)
log_file_stuff()
main()
[*] 其中一个方法可能会调用一个Logger
对象,我希望这个对象和在main()
函数中定义的完全一样,我的问题是我该如何实现这一点?而不需要日志返回和参数的层层传递。
1 个回答
为了回答我自己的问题……我实际上实现了一个跨模块的变量字典,用来作为设置。这些设置里有一个叫 log_level
的变量。
from main import settings
from logger import Logger
log=Logger(settings['log_level'])
然后我有了一个自定义的日志记录类,里面使用了用户输入的 log_level
。当然,settings
是通过 argparse
创建的,主要是用 vars(args)
,这和问题中的写法是一致的。