10
10
11
11
12
12
class RequestResponseLoggingMiddleware (BaseHTTPMiddleware ):
13
- async def dispatch (self , request : Request , call_next : Any ) -> Response :
13
+ async def dispatch (self , request : Request , call_next : Any ) -> Response | Any :
14
14
# Generate unique request ID
15
15
request_id = request .headers .get ("X-Request-ID" , "unknown" )
16
16
@@ -71,15 +71,14 @@ async def _log_response(self, response: Response, request_id: str) -> None:
71
71
72
72
def setup_logging () -> None :
73
73
# Create logs directory if it doesn't exist
74
- log_dir = "data/logs" # os.path.dirname(settings.LOG_FILE)
74
+ log_dir = "data/logs"
75
75
if not os .path .exists (log_dir ):
76
76
os .makedirs (log_dir , exist_ok = True )
77
77
78
- # os.makedirs("data/logs", exist_ok=True)
79
-
80
78
# Set up the main logger
81
79
logger = logging .getLogger ("foxhole" )
82
80
logger .setLevel (settings .LOG_LEVEL )
81
+ logger .propagate = False
83
82
84
83
# Create formatters
85
84
detailed_formatter = logging .Formatter (settings .LOG_FORMAT )
@@ -89,42 +88,47 @@ def setup_logging() -> None:
89
88
console_handler .setLevel (settings .LOG_LEVEL )
90
89
console_handler .setFormatter (detailed_formatter )
91
90
92
- # File handler for general logs (10MB max size, 5 backup files)
91
+ # File handler for general logs
93
92
file_handler = RotatingFileHandler (
94
- "data/logs/foxhole.log" , maxBytes = 10 * 1024 * 1024 , backupCount = 5 # 10MB
93
+ "data/logs/foxhole.log" , maxBytes = 10 * 1024 * 1024 , backupCount = 5
95
94
)
96
95
file_handler .setLevel (logging .DEBUG )
97
96
file_handler .setFormatter (detailed_formatter )
98
97
99
98
# API specific handler
100
99
api_handler = RotatingFileHandler (
101
- "data/logs/api.log" , maxBytes = 10 * 1024 * 1024 , backupCount = 5 # 10MB
100
+ "data/logs/api.log" , maxBytes = 10 * 1024 * 1024 , backupCount = 5
102
101
)
103
102
api_handler .setLevel (logging .INFO )
104
103
api_handler .setFormatter (detailed_formatter )
105
104
106
105
# Database specific handler
107
106
db_handler = RotatingFileHandler (
108
- "data/logs/db.log" , maxBytes = 10 * 1024 * 1024 , backupCount = 5 # 10MB
107
+ "data/logs/db.log" , maxBytes = 10 * 1024 * 1024 , backupCount = 5
109
108
)
110
109
db_handler .setLevel (logging .DEBUG )
111
110
db_handler .setFormatter (detailed_formatter )
112
111
113
112
# Set up API logger
114
113
api_logger = logging .getLogger ("foxhole.api" )
114
+ api_logger .setLevel (logging .INFO )
115
+ api_logger .propagate = False
115
116
api_logger .addHandler (api_handler )
116
117
117
118
# Set up DB logger
118
119
db_logger = logging .getLogger ("foxhole.db" )
120
+ db_logger .setLevel (logging .DEBUG )
121
+ db_logger .propagate = False
119
122
db_logger .addHandler (db_handler )
120
123
121
124
# Add handlers to main logger
122
125
logger .addHandler (console_handler )
123
126
logger .addHandler (file_handler )
124
127
125
128
# Set up SQLAlchemy logging
126
- logging .getLogger ("sqlalchemy.engine" ).setLevel (logging .INFO )
127
- logging .getLogger ("sqlalchemy.engine" ).addHandler (db_handler )
129
+ sqlalchemy_logger = logging .getLogger ("sqlalchemy.engine" )
130
+ sqlalchemy_logger .setLevel (logging .INFO )
131
+ sqlalchemy_logger .addHandler (db_handler )
128
132
129
133
# Set specific loggers to ERROR level only
130
134
logging .getLogger ("uvicorn.access" ).setLevel (logging .ERROR )
0 commit comments