我正在尝试创建一个自定义日志记录处理程序,该处理程序将写入数据库。
我正在使用注入器(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))
但是我想是否有一种方法可以使其直接工作,避免将处理程序与特定的记录器绑定。