1
+ import re
2
+ import logging
3
+ import os
4
+ import sys
5
+ import platform
6
+ import psutil
7
+
8
+ def strip_ansi_codes (text ):
9
+ """Remove ANSI color codes from a string."""
10
+ ansi_escape = re .compile (r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])' )
11
+ return ansi_escape .sub ('' , text )
12
+
13
+ def log_system_info (logger ):
14
+ """
15
+ Logs basic system and hardware information to the provided logger.
16
+ """
17
+ try :
18
+ # Operating system details
19
+ os_name = platform .system ()
20
+ os_version = platform .version ()
21
+ os_release = platform .release ()
22
+ machine = platform .machine ()
23
+ processor = platform .processor ()
24
+
25
+ # CPU and Memory
26
+ cpu_count = psutil .cpu_count (logical = True )
27
+ total_memory = psutil .virtual_memory ().total // (1024 ** 2 ) # Convert bytes to MB
28
+
29
+ logger .info ("========== System Information ==========" )
30
+ logger .info (f"Operating System: { os_name } { os_release } (Version: { os_version } )" )
31
+ logger .info (f"Architecture: { machine } " )
32
+ logger .info (f"Processor: { processor } " )
33
+ logger .info (f"Logical CPUs: { cpu_count } " )
34
+ logger .info (f"Total Memory: { total_memory } MB" )
35
+ logger .info (f"Python Version: { platform .python_version ()} " )
36
+ logger .info ("========================================" )
37
+ except Exception as e :
38
+ logger .error (f"Failed to log system information: { e } " )
39
+
40
+
41
+ def setup_logging ():
42
+ # Determine the user's Documents directory
43
+ #documents_dir = os.path.join(os.path.expanduser("~"), "Documents")
44
+ documents_dir = "./Logs"
45
+ log_dir = os .path .join (documents_dir , "ProjectBabble" )
46
+ os .makedirs (log_dir , exist_ok = True )
47
+ log_file = os .path .join (log_dir , "latest.log" )
48
+
49
+ # Set up logging
50
+ logger = logging .getLogger ("debug_logger" )
51
+ logger .setLevel (logging .DEBUG )
52
+
53
+ file_handler = logging .FileHandler (log_file , mode = 'w' , encoding = 'utf-8' )
54
+ file_handler .setLevel (logging .DEBUG )
55
+ formatter = logging .Formatter ('%(asctime)s - %(message)s' , datefmt = '%Y-%m-%d %H:%M:%S' )
56
+ file_handler .setFormatter (formatter )
57
+
58
+ logger .addHandler (file_handler )
59
+
60
+ # Redirect stdout and stderr
61
+ class StreamToLogger :
62
+ def __init__ (self , stream , log_level ):
63
+ self .stream = stream
64
+ self .log_level = log_level
65
+
66
+ def write (self , message ):
67
+ message = strip_ansi_codes (message )
68
+ if message .strip ():
69
+ logger .log (self .log_level , message .strip ())
70
+ self .stream .write (message )
71
+ self .stream .flush ()
72
+
73
+ def flush (self ):
74
+ self .stream .flush ()
75
+
76
+ sys .stdout = StreamToLogger (sys .stdout , logging .INFO )
77
+ sys .stderr = StreamToLogger (sys .stderr , logging .ERROR )
78
+
79
+ log_system_info (logger )
0 commit comments