我写了一个Python 3
日志记录包装器,主要是为了帮助在Slack中输出严重错误。
在我的main.py
中,我有以下代码:
from logwrapper import LogWrapper
logging.setLoggerClass(LogWrapper)
log_message_format = "[%(asctime)s] [%(levelname)8s] %(message)s"
if ARGS.log_path:
logging.basicConfig(
filename=ARGS.log_path,
format=log_message_format
)
else:
logging.basicConfig(
stream=sys.stdout,
format=log_message_format
)
this_script_filename = os.path.splitext(sys.argv[0])[0]
LOG = logging.getLogger(this_script_filename)
if ARGS.debug:
level = logging.getLevelName('DEBUG')
else:
level = logging.getLevelName('INFO')
LOG.setLevel(level)
我的包装器类(logwrapper/wrapper.py
)初始化如下:
class LogWrapper(logging.Logger):
def __init__(self, name, level=logging.NOTSET):
return super(LogWrapper, self).__init__(name, level)
这有效,我的包装器函数之一(.critical
)的参数为slackwrapper_instance
,以使Slack输出正常工作。
但是,这使函数有些复杂,因为每次使用LOG.critical
时,我都必须传递我的slackwrapper
实例。
是否有一种方法可以修改我的代码,以在实例化该类时包含一个参数,以便该实例可用于日志包装器类中的每个函数?例如
SLACK = SlackWrapper()
LOG = logging.getLogger(this_script_filename, SLACK)
我已经看到了LogAdapter
方法的提法,但是我不知道如何修改代码以利用它。