| import logging |
| import os |
|
|
| class FlushFileHandler(logging.FileHandler): |
| def emit(self, record): |
| super().emit(record) |
| self.flush() |
|
|
| def setup_logger(name="app", log_file="logs/app.log"): |
| |
| os.makedirs(os.path.dirname(log_file), exist_ok=True) |
|
|
| logger = logging.getLogger(name) |
| logger.propagate = False |
| logger.setLevel(logging.INFO) |
|
|
| if logger.handlers: |
| return logger |
|
|
| handler = FlushFileHandler( |
| log_file, |
| mode="a", |
| encoding="utf-8" |
| ) |
|
|
| formatter = logging.Formatter( |
| "[%(asctime)s] [%(name)s] [%(levelname)s] %(message)s", |
| "%H:%M:%S" |
| ) |
| handler.setFormatter(formatter) |
|
|
| logger.addHandler(handler) |
|
|
| console_handler = logging.StreamHandler() |
| console_handler.setFormatter(formatter) |
| logger.addHandler(console_handler) |
|
|
| return logger |
|
|
| def reset_logger(logger_name): |
| logger = logging.getLogger(logger_name) |
| for h in logger.handlers[:]: |
| h.close() |
| logger.removeHandler(h) |
| print(f"Logger '{logger_name}' has been reset.") |