import json import logging from datetime import datetime from flask import request, session from src.utils import is_authenticated class AuditLog: @classmethod def init_app(cls, app): def after_request_callback(response): if not is_authenticated() or request.method in ("GET", "HEAD"): return response user_id = session[app.config["PROFILE_KEY"]]["user_id"] user_name = session[app.config["PROFILE_KEY"]]["name"] auditlog = { "time_utc": datetime.utcnow().strftime("%m/%d/%Y, %H:%M:%S"), "request_method": request.method, "request_url": request.url, "request_form": json.dumps(dict(request.form.lists())), "user_agent": request.headers.get("User-Agent"), "response_status": response.status, "user_id": user_id, "user_name": user_name, "ip": request.environ.get("HTTP_X_REAL_IP", request.remote_addr), } logging.getLogger("auditlog").warning(json.dumps(auditlog)) return response app.after_request(after_request_callback)