Spaces:
Running
Running
| from datetime import datetime | |
| import logging | |
| from banco import SessionLocal | |
| from models import LogAcesso | |
| # Configuração mínima de logger (opcional; mantenha neutro) | |
| logger = logging.getLogger(__name__) | |
| def registrar_log(usuario, acao, tabela, registro_id=None): | |
| """ | |
| Registra um log de acesso/ação na tabela LogAcesso. | |
| Mantém assinatura e padrão original, mas com tratamento de exceções e normalização. | |
| :param usuario: str | usuário responsável pela ação (fallback para 'sistema' se None/vazio) | |
| :param acao: str | ação realizada (ex.: 'CRIAR', 'DESATIVAR', 'EXCLUIR') | |
| :param tabela: str | nome da tabela/entidade relacionada (ex.: 'eventos_calendario') | |
| :param registro_id: int | id do registro afetado (opcional) | |
| """ | |
| # Normalização defensiva (mantendo comportamento atual) | |
| usuario = (usuario or "sistema") | |
| acao = (acao or "").strip() or "DESCONHECIDA" | |
| tabela = (tabela or "").strip() or "desconhecida" | |
| db = SessionLocal() | |
| try: | |
| log = LogAcesso( | |
| usuario=usuario, | |
| acao=acao, | |
| tabela=tabela, | |
| registro_id=registro_id, | |
| data_hora=datetime.now() | |
| ) | |
| db.add(log) | |
| db.commit() | |
| except Exception as e: | |
| # Em caso de falha, desfazer transação e registrar o problema no logger | |
| try: | |
| db.rollback() | |
| except Exception: | |
| # Se rollback também falhar, seguimos fechando a sessão | |
| pass | |
| logger.exception( | |
| "Falha ao registrar log: usuario=%r, acao=%r, tabela=%r, registro_id=%r. Erro: %s", | |
| usuario, acao, tabela, registro_id, e | |
| ) | |
| # Não propaga exceção: evita quebrar o fluxo da aplicação | |
| finally: | |
| db.close() | |
| # ✅ Opcional: uma versão 'safe' que nunca lança erro para o chamador. | |
| # Mantém o padrão existente; use quando o log não pode interromper a operação. | |
| def registrar_log_safe(usuario, acao, tabela, registro_id=None): | |
| try: | |
| registrar_log(usuario, acao, tabela, registro_id) | |
| except Exception: | |
| # Defesa adicional: se algo escapar do registrar_log, não quebra o chamador | |
| logger.exception( | |
| "registrar_log_safe: erro inesperado ao registrar log (usuario=%r, acao=%r, tabela=%r, registro_id=%r)", | |
| usuario, acao, tabela, registro_id | |
| ) | |