-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathlogging_config.py
More file actions
99 lines (83 loc) · 3.55 KB
/
logging_config.py
File metadata and controls
99 lines (83 loc) · 3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import logging
import os
import warnings
from pathlib import Path
from rich.logging import RichHandler
import state
class NullHandler(logging.Handler):
def emit(self, record):
pass
def _get_log_file():
"""Get the path to the log file, creating parent directories if needed."""
config_dir = Path.home() / ".config" / "ctrlspeak"
log_dir = config_dir / "logs"
log_dir.mkdir(parents=True, exist_ok=True)
return log_dir / "ctrlspeak.log"
def setup_logging():
warnings.filterwarnings("ignore")
os.environ["NEMO_LOGGING_LEVEL"] = "ERROR"
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"
class FilterNemoWarnings(logging.Filter):
def filter(self, record):
if state.DEBUG_MODE:
return True
if "nemo" in record.name.lower():
return False
return True
# Get root logger
root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG) # Set root to DEBUG to capture everything
# Remove any existing handlers
for handler in root_logger.handlers[:]:
root_logger.removeHandler(handler)
# Set up both console and file logging
console_handler = RichHandler(rich_tracebacks=True, console=state.console)
console_handler.setLevel(logging.INFO) # Console shows INFO and above
handlers = [console_handler]
# Add file handler for persistent logging
try:
log_file = _get_log_file()
file_handler = logging.FileHandler(log_file)
file_handler.setFormatter(logging.Formatter(
fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
))
file_handler.setLevel(logging.DEBUG)
handlers.append(file_handler)
except Exception as e:
# If file logging fails, just log to console
state.console.print(f"[yellow]Warning: Could not set up file logging: {e}[/yellow]")
# Add handlers to root logger
for handler in handlers:
root_logger.addHandler(handler)
# Add filter to root
root_logger.addFilter(FilterNemoWarnings())
# Configure specific loggers
for logger_name in ['nemo', 'nemo_logger', 'nemo.collections']:
logger = logging.getLogger(logger_name)
logger.setLevel(logging.CRITICAL)
logger.addFilter(FilterNemoWarnings())
# Suppress verbose libraries
for lib in ['matplotlib', 'numba', 'urllib3', 'nemo', 'nemo_logger',
'nemo.collections', 'pytorch_lightning', 'filelock',
'huggingface_hub', 'transformers', 'sound_player']:
logging.getLogger(lib).setLevel(logging.CRITICAL)
logging.getLogger(lib).addFilter(FilterNemoWarnings())
def setup_logging_for_mode(debug_mode):
logger = logging.getLogger("ctrlspeak")
audio_logger = logging.getLogger("ctrlspeak.audio")
if debug_mode:
logger.setLevel(logging.DEBUG)
audio_logger.setLevel(logging.DEBUG)
os.environ["NEMO_LOGGING_LEVEL"] = "INFO"
warnings.filterwarnings("default")
for lib in ['nemo', 'pytorch_lightning']:
logging.getLogger(lib).setLevel(logging.INFO)
else:
# In normal mode, still show INFO level logs for audio recording
logger.setLevel(logging.INFO)
audio_logger.setLevel(logging.INFO) # Changed from WARNING to INFO to capture audio recording logs
os.environ["NEMO_LOGGING_LEVEL"] = "CRITICAL"
for lib in ['nemo', 'nemo_logger', 'nemo.collections', 'pytorch_lightning']:
logging.getLogger(lib).setLevel(logging.CRITICAL)
warnings.filterwarnings("ignore")