|
|
import logging |
|
|
import logging.handlers |
|
|
import os |
|
|
import sys |
|
|
from pathlib import Path |
|
|
|
|
|
def setup_logging(log_level: str = "INFO", log_file: str = None): |
|
|
"""Setup application logging configuration""" |
|
|
|
|
|
|
|
|
log_dir = Path("logs") |
|
|
log_dir.mkdir(exist_ok=True) |
|
|
|
|
|
|
|
|
numeric_level = getattr(logging, log_level.upper(), None) |
|
|
if not isinstance(numeric_level, int): |
|
|
raise ValueError(f'Invalid log level: {log_level}') |
|
|
|
|
|
|
|
|
formatter = logging.Formatter( |
|
|
'%(asctime)s - %(name)s - %(levelname)s - %(message)s' |
|
|
) |
|
|
|
|
|
|
|
|
root_logger = logging.getLogger() |
|
|
root_logger.setLevel(numeric_level) |
|
|
|
|
|
|
|
|
root_logger.handlers.clear() |
|
|
|
|
|
|
|
|
console_handler = logging.StreamHandler(sys.stdout) |
|
|
console_handler.setLevel(numeric_level) |
|
|
console_handler.setFormatter(formatter) |
|
|
root_logger.addHandler(console_handler) |
|
|
|
|
|
|
|
|
if log_file: |
|
|
file_handler = logging.handlers.RotatingFileHandler( |
|
|
log_file, |
|
|
maxBytes=10*1024*1024, |
|
|
backupCount=5 |
|
|
) |
|
|
file_handler.setLevel(numeric_level) |
|
|
file_handler.setFormatter(formatter) |
|
|
root_logger.addHandler(file_handler) |
|
|
|
|
|
|
|
|
error_handler = logging.handlers.RotatingFileHandler( |
|
|
log_dir / "error.log", |
|
|
maxBytes=10*1024*1024, |
|
|
backupCount=5 |
|
|
) |
|
|
error_handler.setLevel(logging.ERROR) |
|
|
error_handler.setFormatter(formatter) |
|
|
root_logger.addHandler(error_handler) |
|
|
|
|
|
|
|
|
logging.getLogger("gradio").setLevel(logging.INFO) |
|
|
logging.getLogger("flask").setLevel(logging.INFO) |
|
|
logging.getLogger("werkzeug").setLevel(logging.WARNING) |
|
|
|
|
|
return root_logger |
|
|
|
|
|
def get_logger(name: str): |
|
|
"""Get a logger with the specified name""" |
|
|
return logging.getLogger(name) |
|
|
|
|
|
|
|
|
if __name__ != "__main__": |
|
|
log_level = os.getenv('LOG_LEVEL', 'INFO') |
|
|
log_file = os.getenv('LOG_FILE', 'logs/app.log') |
|
|
setup_logging(log_level, log_file) |
|
|
|