Files
Comparison_Project/app/services/logger_service.py

79 lines
2.1 KiB
Python

import os
import logging
from logging.handlers import RotatingFileHandler
from flask import request, session, has_request_context
class RequestContextFilter(logging.Filter):
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:
@staticmethod
def init_app(app):
if not os.path.exists("logs"):
os.makedirs("logs")
formatter = logging.Formatter(
"%(asctime)s | %(levelname)s | "
"User:%(user)s | IP:%(ip)s | "
"Method:%(method)s | URL:%(url)s | "
"%(message)s"
)
# INFO LOG
info_handler = RotatingFileHandler(
"logs/app.log",
maxBytes=5 * 1024 * 1024,
backupCount=5
)
info_handler.setLevel(logging.INFO)
info_handler.setFormatter(formatter)
# ERROR LOG
error_handler = RotatingFileHandler(
"logs/error.log",
maxBytes=5 * 1024 * 1024,
backupCount=5
)
error_handler.setLevel(logging.ERROR)
error_handler.setFormatter(formatter)
# 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)
# Log every request automatically
@app.before_request
def log_request():
app.logger.info("Request Started")