将参数传递给日志记录包装器类

时间:2019-07-16 13:53:02

标签: python python-3.x python-logging

我写了一个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方法的提法,但是我不知道如何修改代码以利用它。

0 个答案:

没有答案