mrradix commited on
Commit
141cd60
·
verified ·
1 Parent(s): 410fe54

Update utils/logging.py

Browse files
Files changed (1) hide show
  1. utils/logging.py +125 -39
utils/logging.py CHANGED
@@ -1,71 +1,157 @@
1
- # utils/logging.py
 
 
 
2
 
3
  import logging
 
4
  import sys
5
  from datetime import datetime
 
6
 
7
- def get_logger(name=None):
 
8
  """
9
- Get a configured logger instance
10
 
11
  Args:
12
- name (str, optional): Logger name, typically __name__
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
 
 
 
14
  Returns:
15
- logging.Logger: Configured logger instance
16
  """
17
  if name is None:
18
  name = __name__
19
 
20
  logger = logging.getLogger(name)
21
 
22
- # Only add handler if logger doesn't already have one
23
- if not logger.handlers:
24
- # Create console handler
25
- handler = logging.StreamHandler(sys.stdout)
26
- handler.setLevel(logging.INFO)
27
-
28
- # Create formatter
29
- formatter = logging.Formatter(
30
- 'INFO - %(name)s - %(message)s'
31
- )
32
- handler.setFormatter(formatter)
33
-
34
- # Add handler to logger
35
- logger.addHandler(handler)
36
- logger.setLevel(logging.INFO)
37
 
38
  return logger
39
 
40
- def log_error(logger, error, context=""):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  """
42
- Log error with context information
43
 
44
  Args:
45
- logger: Logger instance
46
- error: Exception or error message
47
- context (str): Additional context information
48
  """
49
- if context:
50
- logger.error(f"{context}: {str(error)}")
 
51
  else:
52
- logger.error(str(error))
53
 
54
- def log_performance(event_name: str, duration_ms: float):
 
 
 
 
 
 
 
55
  """
56
- Log performance timing for an event.
 
 
 
 
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  Args:
59
- event_name (str): Name of the event or function
60
- duration_ms (float): Duration in milliseconds
61
  """
62
  logger = get_logger()
63
- logger.info(f"⏱️ {event_name} took {duration_ms:.2f} ms")
64
 
65
- # Initialize logging system
66
- print(f"===== Application Startup at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} =====")
67
- print("INFO - Logging system initialized")
68
 
69
- # Create a default logger for the module
70
- logger = get_logger(__name__)
71
- logger.info("Logging system initialized")
 
1
+ """
2
+ Logging utilities for the MONA application
3
+ Fixed version with all required functions
4
+ """
5
 
6
  import logging
7
+ import os
8
  import sys
9
  from datetime import datetime
10
+ from pathlib import Path
11
 
12
+
13
+ def setup_logging(log_level=logging.INFO, log_file=None):
14
  """
15
+ Set up logging configuration
16
 
17
  Args:
18
+ log_level: Logging level (default: INFO)
19
+ log_file: Optional log file path
20
+ """
21
+ # Create logs directory if it doesn't exist
22
+ if log_file:
23
+ log_dir = Path(log_file).parent
24
+ log_dir.mkdir(exist_ok=True)
25
+
26
+ # Configure logging format
27
+ formatter = logging.Formatter(
28
+ '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
29
+ datefmt='%Y-%m-%d %H:%M:%S'
30
+ )
31
+
32
+ # Set up root logger
33
+ root_logger = logging.getLogger()
34
+ root_logger.setLevel(log_level)
35
+
36
+ # Clear existing handlers
37
+ root_logger.handlers.clear()
38
+
39
+ # Console handler
40
+ console_handler = logging.StreamHandler(sys.stdout)
41
+ console_handler.setFormatter(formatter)
42
+ root_logger.addHandler(console_handler)
43
+
44
+ # File handler if specified
45
+ if log_file:
46
+ file_handler = logging.FileHandler(log_file)
47
+ file_handler.setFormatter(formatter)
48
+ root_logger.addHandler(file_handler)
49
+
50
+
51
+ def get_logger(name=None):
52
+ """
53
+ Get a logger instance
54
 
55
+ Args:
56
+ name: Logger name (default: __name__)
57
+
58
  Returns:
59
+ logging.Logger: Logger instance
60
  """
61
  if name is None:
62
  name = __name__
63
 
64
  logger = logging.getLogger(name)
65
 
66
+ # If no handlers are set up, set up basic logging
67
+ if not logger.handlers and not logging.getLogger().handlers:
68
+ setup_logging()
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
  return logger
71
 
72
+
73
+ def log_error(message, error=None, extra_data=None):
74
+ """
75
+ Log error messages with optional error details and extra data
76
+
77
+ Args:
78
+ message (str): The error message to log
79
+ error (Exception, optional): The exception object if available
80
+ extra_data (dict, optional): Additional data to include in log
81
+ """
82
+ logger = get_logger()
83
+
84
+ if error:
85
+ error_msg = f"{message}: {str(error)}"
86
+ if hasattr(error, '__traceback__'):
87
+ import traceback
88
+ error_msg += f"\nTraceback: {traceback.format_exc()}"
89
+ else:
90
+ error_msg = message
91
+
92
+ if extra_data:
93
+ logger.error(error_msg, extra=extra_data)
94
+ else:
95
+ logger.error(error_msg)
96
+
97
+
98
+ def log_warning(message, extra_data=None):
99
  """
100
+ Log warning messages
101
 
102
  Args:
103
+ message (str): The warning message to log
104
+ extra_data (dict, optional): Additional data to include in log
 
105
  """
106
+ logger = get_logger()
107
+ if extra_data:
108
+ logger.warning(message, extra=extra_data)
109
  else:
110
+ logger.warning(message)
111
 
112
+
113
+ def log_info(message, extra_data=None):
114
+ """
115
+ Log info messages
116
+
117
+ Args:
118
+ message (str): The info message to log
119
+ extra_data (dict, optional): Additional data to include in log
120
  """
121
+ logger = get_logger()
122
+ if extra_data:
123
+ logger.info(message, extra=extra_data)
124
+ else:
125
+ logger.info(message)
126
 
127
+
128
+ def log_debug(message, extra_data=None):
129
+ """
130
+ Log debug messages
131
+
132
+ Args:
133
+ message (str): The debug message to log
134
+ extra_data (dict, optional): Additional data to include in log
135
+ """
136
+ logger = get_logger()
137
+ if extra_data:
138
+ logger.debug(message, extra=extra_data)
139
+ else:
140
+ logger.debug(message)
141
+
142
+
143
+ def log_exception(message, exc_info=True):
144
+ """
145
+ Log exceptions with full traceback
146
+
147
  Args:
148
+ message (str): The exception message to log
149
+ exc_info (bool): Whether to include exception info
150
  """
151
  logger = get_logger()
152
+ logger.exception(message, exc_info=exc_info)
153
 
 
 
 
154
 
155
+ # Initialize logging when module is imported
156
+ if __name__ != "__main__":
157
+ setup_logging()