Files
BrowserOS/packages/browseros/build/common/logger.py
Nikhil 2901e73547 patches & fixes for 0.31.1 release (#219)
* chore: new browseros-server binaries

* bugfix: was writing chromium_patches/ in wrong location

* patch: ntp footer disabled by default

* patch: browseros alpha flag

* patch: add log for port saving

* chore: increment PATCH

* feat: use packages/browseros as root_dir properly in context.py
2025-12-05 16:39:56 -08:00

93 lines
2.5 KiB
Python
Generated

#!/usr/bin/env python3
"""
Logging utilities for the build system
Provides consistent logging with Typer output and file logging
"""
import typer
from pathlib import Path
from datetime import datetime
# Global log file handle
_log_file = None
def _ensure_log_file():
"""Ensure log file is created with timestamp"""
global _log_file
if _log_file is None:
from .paths import get_package_root
# Create logs directory if it doesn't exist
log_dir = get_package_root() / "logs"
log_dir.mkdir(exist_ok=True)
# Create log file with timestamp
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
log_file_path = log_dir / f"build_{timestamp}.log"
# Open with UTF-8 encoding to handle any characters
_log_file = open(log_file_path, "w", encoding="utf-8")
_log_file.write(
f"BrowserOS Build Log - Started at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
)
_log_file.write("=" * 80 + "\n\n")
return _log_file
def _log_to_file(message: str):
"""Write message to log file with timestamp"""
log_file = _ensure_log_file()
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_file.write(f"[{timestamp}] {message}\n")
log_file.flush()
def log_info(message: str):
"""Print info message using Typer"""
typer.echo(message)
_log_to_file(f"INFO: {message}")
def log_warning(message: str):
"""Print warning message with color"""
typer.secho(f"⚠️ {message}", fg=typer.colors.YELLOW)
_log_to_file(f"WARNING: {message}")
def log_error(message: str):
"""Print error message to stderr with color"""
typer.secho(f"{message}", fg=typer.colors.RED, err=True)
_log_to_file(f"ERROR: {message}")
def log_success(message: str):
"""Print success message with color"""
typer.secho(f"{message}", fg=typer.colors.GREEN)
_log_to_file(f"SUCCESS: {message}")
def log_debug(message: str, enabled: bool = False):
"""Print debug message if enabled"""
if enabled:
typer.secho(f"🔍 {message}", fg=typer.colors.BLUE, dim=True)
_log_to_file(f"DEBUG: {message}")
def close_log_file():
"""Close the log file if it's open"""
global _log_file
if _log_file:
_log_file.close()
_log_file = None
# Export all logging functions
__all__ = [
'log_info',
'log_warning',
'log_error',
'log_success',
'log_debug',
'close_log_file',
'_log_to_file', # Internal use by utils.run_command
]