Setup logging for daemon.
(foreground: bool = False)
| 80 | |
| 81 | |
| 82 | def setup_logging(foreground: bool = False) -> None: |
| 83 | """Setup logging for daemon.""" |
| 84 | DAEMON_DIR.mkdir(parents=True, exist_ok=True) |
| 85 | |
| 86 | # Configure root logger |
| 87 | logger = logging.getLogger() |
| 88 | logger.setLevel(logging.INFO) |
| 89 | |
| 90 | # Console handler (for foreground mode) |
| 91 | if foreground: |
| 92 | console_handler = logging.StreamHandler(sys.stdout) |
| 93 | console_handler.setLevel(logging.INFO) |
| 94 | console_formatter = logging.Formatter( |
| 95 | "%(asctime)s - %(name)s - %(levelname)s - %(message)s" |
| 96 | ) |
| 97 | console_handler.setFormatter(console_formatter) |
| 98 | logger.addHandler(console_handler) |
| 99 | |
| 100 | # Rotating file handler (always) |
| 101 | file_handler = RotatingFileHandler( |
| 102 | str(LOG_FILE), |
| 103 | maxBytes=10 * 1024 * 1024, # 10MB |
| 104 | backupCount=3, |
| 105 | ) |
| 106 | file_handler.setLevel(logging.INFO) |
| 107 | file_formatter = logging.Formatter( |
| 108 | "%(asctime)s - %(name)s - %(levelname)s - %(message)s" |
| 109 | ) |
| 110 | file_handler.setFormatter(file_formatter) |
| 111 | logger.addHandler(file_handler) |
| 112 | |
| 113 | |
| 114 | def read_status_file_safe() -> DaemonStatus: |