create regular exp added and change model

This commit is contained in:
2026-03-17 15:35:52 +05:30
parent c5b3e7bd60
commit 96a3a79731
9 changed files with 97 additions and 186 deletions

View File

@@ -1,20 +1,25 @@
import os
import logging
from logging.handlers import RotatingFileHandler
from flask import request, session
from flask import request, session, has_request_context
class RequestFormatter(logging.Formatter):
"""
Custom formatter to safely inject request data
"""
class RequestContextFilter(logging.Filter):
def format(self, record):
record.user = getattr(record, "user", "Anonymous")
record.ip = getattr(record, "ip", "N/A")
record.method = getattr(record, "method", "N/A")
record.url = getattr(record, "url", "N/A")
return super().format(record)
def filter(self, record):
if has_request_context():
record.user = session.get("user_email", "Anonymous")
record.ip = request.remote_addr
record.method = request.method
record.url = request.url
else:
record.user = "System"
record.ip = "N/A"
record.method = "N/A"
record.url = "N/A"
return True
class LoggerService:
@@ -22,18 +27,17 @@ class LoggerService:
@staticmethod
def init_app(app):
# Create logs folder if not exists
if not os.path.exists("logs"):
os.makedirs("logs")
formatter = RequestFormatter(
formatter = logging.Formatter(
"%(asctime)s | %(levelname)s | "
"User:%(user)s | IP:%(ip)s | "
"Method:%(method)s | URL:%(url)s | "
"%(message)s"
)
# 🔹 INFO LOG
# INFO LOG
info_handler = RotatingFileHandler(
"logs/app.log",
maxBytes=5 * 1024 * 1024,
@@ -42,7 +46,7 @@ class LoggerService:
info_handler.setLevel(logging.INFO)
info_handler.setFormatter(formatter)
# 🔹 ERROR LOG
# ERROR LOG
error_handler = RotatingFileHandler(
"logs/error.log",
maxBytes=5 * 1024 * 1024,
@@ -51,32 +55,25 @@ class LoggerService:
error_handler.setLevel(logging.ERROR)
error_handler.setFormatter(formatter)
# 🔹 CONSOLE LOG
# CONSOLE
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(formatter)
# 🔹 ADD FILTER (important)
context_filter = RequestContextFilter()
info_handler.addFilter(context_filter)
error_handler.addFilter(context_filter)
console_handler.addFilter(context_filter)
app.logger.setLevel(logging.DEBUG)
app.logger.addHandler(info_handler)
app.logger.addHandler(error_handler)
app.logger.addHandler(console_handler)
# Auto request logging
# Log every request automatically
@app.before_request
def log_request():
app.logger.info(
"Request Started",
extra=LoggerService.get_request_data()
)
@staticmethod
def get_request_data():
try:
return {
"user": session.get("user_email", "Anonymous"),
"ip": request.remote_addr,
"method": request.method,
"url": request.url
}
except:
return {}
app.logger.info("Request Started")