在Python中将日志记录处理程序与注入器结合使用

时间:2019-10-22 14:52:57

标签: python logging dependency-injection

我正在尝试创建一个自定义日志记录处理程序,该处理程序将写入数据库。

我正在使用注入器(https://github.com/alecthomas/injector)在所有服务中注入数据库实例。

我的自定义日志记录处理程序定义为:

from injector import inject
from logging import Handler
from app.system import Database

class MyDbLogHandler(Handler):
    @inject
    def __init__(self, database: Database):
        Handler.__init__(self)
        self.database = database

    def emit(self, record):
        ...

我的日志记录配置如下:

logging:
    version: 1
 formatters:
    simple:
        format: '[%(asctime)s]-%(levelname)s-%(message)s'
        datefmt: '%d-%b-%y %H:%M:%S'
 handlers:
    db_handler:
        class: app.system.handlers.MyDbLogHandler
        level: DEBUG
 loggers:
    my_logger_one:
        level: DEBUG
        handlers: [console,db_handler]
        propagate: no
    my_logger_two:
        level: ERROR
        handlers: [db_handler]
        propagate: no

但是,当它尝试实例化处理程序时,会引发错误:

Unable to configure handler 'db_handler': __init__() missing 1 required positional argument: 'database'

有没有一种方法可以使处理程序与注入器框架一起工作?

注意: 我知道我可以手动实例化处理程序并将其添加到记录器中:

logger = logging.getLogger('my_logger_one')
logger.addHandler(injector.get(MyDbLogHandler))

但是我想是否有一种方法可以使其直接工作,避免将处理程序与特定的记录器绑定。

0 个答案:

没有答案