Set up a logger with consistent formatting and optional colors. Args: name: Logger name (defaults to 'quantmind') level: Logging level format_string: Custom format string use_color: Whether to use colors (auto-detect if None) file_output: Optional file pa
(
name: Optional[str] = None,
level: int = logging.INFO,
format_string: Optional[str] = None,
use_color: Optional[bool] = None,
file_output: Optional[str] = None,
)
| 78 | |
| 79 | |
| 80 | def setup_logger( |
| 81 | name: Optional[str] = None, |
| 82 | level: int = logging.INFO, |
| 83 | format_string: Optional[str] = None, |
| 84 | use_color: Optional[bool] = None, |
| 85 | file_output: Optional[str] = None, |
| 86 | ) -> logging.Logger: |
| 87 | """Set up a logger with consistent formatting and optional colors. |
| 88 | |
| 89 | Args: |
| 90 | name: Logger name (defaults to 'quantmind') |
| 91 | level: Logging level |
| 92 | format_string: Custom format string |
| 93 | use_color: Whether to use colors (auto-detect if None) |
| 94 | file_output: Optional file path for file logging |
| 95 | |
| 96 | Returns: |
| 97 | Configured logger instance |
| 98 | """ |
| 99 | if name is None: |
| 100 | name = "quantmind" |
| 101 | |
| 102 | if format_string is None: |
| 103 | format_string = "[%(asctime)s %(levelname)-8s %(name)s %(filename)s:%(lineno)d] %(message)s" |
| 104 | |
| 105 | logger = logging.getLogger(name) |
| 106 | |
| 107 | # Only configure if not already configured |
| 108 | if not logger.handlers: |
| 109 | logger.setLevel(level) |
| 110 | |
| 111 | # Create console handler |
| 112 | console_handler = logging.StreamHandler(sys.stdout) |
| 113 | console_handler.setLevel(level) |
| 114 | |
| 115 | # Create colored formatter for console |
| 116 | console_formatter = ColoredFormatter( |
| 117 | format_string, datefmt="%Y-%m-%d %H:%M:%S", use_color=use_color |
| 118 | ) |
| 119 | console_handler.setFormatter(console_formatter) |
| 120 | logger.addHandler(console_handler) |
| 121 | |
| 122 | # Add file handler if requested |
| 123 | if file_output: |
| 124 | file_handler = logging.FileHandler(file_output) |
| 125 | file_handler.setLevel(level) |
| 126 | |
| 127 | # File output should not have colors |
| 128 | file_formatter = logging.Formatter( |
| 129 | format_string, datefmt="%Y-%m-%d %H:%M:%S" |
| 130 | ) |
| 131 | file_handler.setFormatter(file_formatter) |
| 132 | logger.addHandler(file_handler) |
| 133 | |
| 134 | # Prevent propagation to root logger |
| 135 | logger.propagate = False |
| 136 | |
| 137 | return logger |
no test coverage detected