Python - 忽略日志异常

Python - ignore exception for log

我有这个方法:

def get_sftp_connection(self, log_error=True):
    self.ensure_one()
    login = self.login_id
    LogCustom = self.env['log.custom']
    try:
        transport = Transport((login.host, login.port))
        transport.connect(username=login.user, password=login.passwd)
        sftp = SFTPClient.from_transport(transport)            
    except socket.gaierror:
        msg = _("Name or service '%s' not known") % (login.host)
        if log_error:
            LogCustom.log_error_event(operation='read', ref=self._get_rec_description(), name=msg)
        raise ValidationError(msg)
    return sftp

如果发生异常,我想在数据库中创建日志记录。但 python/psycopg2 似乎回滚任何更改,因为异常。当我检查日志是否在 raise 发生之前创建时。是的,但是在 raise 之后一切都回滚了。

是否可以raise同时在数据库中创建日志?就像在一些不同的事务或其他东西中包装日志创建(这样可以避免回滚)

如果选中日志记录选项,我选择跳过加薪,这样我就可以在数据库中创建日志。虽然我不得不调整代码以期望 None 可以从此方法返回。

这实际上是一种解决方法。如果有更好的完整proof/safe解决方案,请post作为答案。

def get_sftp_connection(self, log_error=True):
    self.ensure_one()
    login = self.login_id
    LogCustom = self.env['log.custom']
    ref = self._get_rec_description()
    try:
        transport = Transport((login.host, login.port))
        transport.connect(username=login.user, password=login.passwd)
        sftp = SFTPClient.from_transport(transport)            
    except socket.gaierror:
        msg = _("Name or service '%s' not known") % (login.host)
        if log_error:
            LogCustom.log_warning_event(operation='read', ref=ref, name=msg)
            return None
        else:
            raise ValidationError(msg)
    return sftp