Log API error details to log.txt
(
self,
error_message: str,
status_code: Optional[int] = None,
response_text: Optional[str] = None
)
| 220 | self.logger.error(f"Error logging response: {e}") |
| 221 | |
| 222 | def log_error( |
| 223 | self, |
| 224 | error_message: str, |
| 225 | status_code: Optional[int] = None, |
| 226 | response_text: Optional[str] = None |
| 227 | ): |
| 228 | """Log API error details to log.txt""" |
| 229 | |
| 230 | if not config.debug_enabled: |
| 231 | return |
| 232 | |
| 233 | try: |
| 234 | self._write_separator() |
| 235 | self.logger.info(f"🔴 [ERROR] {self._format_timestamp()}") |
| 236 | self._write_separator("-") |
| 237 | |
| 238 | if status_code: |
| 239 | self.logger.info(f"Status Code: {status_code}") |
| 240 | |
| 241 | self.logger.info(f"Error Message: {error_message}") |
| 242 | |
| 243 | if response_text: |
| 244 | self.logger.info("\n📦 Error Response:") |
| 245 | # Try to parse as JSON |
| 246 | try: |
| 247 | parsed = json.loads(response_text) |
| 248 | body_str = json.dumps(parsed, indent=2, ensure_ascii=False) |
| 249 | self.logger.info(body_str) |
| 250 | except: |
| 251 | # Not JSON, log as text |
| 252 | if len(response_text) > 2000: |
| 253 | self.logger.info(f"{response_text[:2000]}... (truncated)") |
| 254 | else: |
| 255 | self.logger.info(response_text) |
| 256 | |
| 257 | self._write_separator() |
| 258 | self.logger.info("") # Empty line |
| 259 | |
| 260 | except Exception as e: |
| 261 | self.logger.error(f"Error logging error: {e}") |
| 262 | |
| 263 | def log_info(self, message: str): |
| 264 | """Log general info message to log.txt""" |
no test coverage detected