create regular exp added and change model
This commit is contained in:
@@ -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")
|
||||
Reference in New Issue
Block a user